num2strでchar型になる理由

조회 수: 16 (최근 30일)
mi
mi 2023년 2월 2일
편집: Atsushi Ueno 2023년 2월 2일
data10 (10000*19 double)を文字列変換するため、num2strを使用しました。
しかし変換後のデータがdata11 (10000*52 char) となっています。
この後の操作としてはcontainsを使う為、このままではエラーとなってしまいます。
初心者質問で恐縮ですが、自力では解決出来なかった為皆さんのご意見をよろしくお願いいたします。
  댓글 수: 1
mi
mi 2023년 2월 2일
data11 = num2str(data10);
data12 = string(data11);
のようにnum2str,stringを併用したところ、欲しいデータ形式となりました。
ですがnum2strの性質上、numberをstringに変換すると理解していたので、併用すべき理由が理解できていません。
もし分かる方がいらっしゃいましたら、ご教授いただければ幸いです。

댓글을 달려면 로그인하십시오.

채택된 답변

Atsushi Ueno
Atsushi Ueno 2023년 2월 2일
편집: Atsushi Ueno 2023년 2월 2일
下記の事を知ると良いと思います。説明する事も難しいですが説明してみます。
  • 二種類の異なる文字データ型がある
  • 両者は次元が1段階異なる
型 スカラ ベクトル(1次元) 行列(2次元) cell 配列
char ’A' 'ABCDEF' ['ABCDEF'; 'GHIJKL'] {[n×m char] [o×p char] [q×r char]}
string "AB" ["AB","CD","EF"] ["AB","CD","EF"; "GH","IJ","KL"] {[n×m string] [o×p string] [q×r string] }
char 型の1文字は「文字スカラ」と呼ばれ、数値スカラと同じ次元を持ちます。
複数の文字は「文字ベクトル」と呼ばれる1次元配列データになります。
double('ABC') % 'A'のASCIIコードは65(0x41)
ans = 1×3
65 66 67
従って、複数の単語を2次元の配列データにする事が出来ません。例えば、num2str 関数の出力は単語間がスペース文字で区切られていますが、あくまでもこれは1要素が1文字の2次元配列データです。
num2str(rand(3))
ans = 3×31 char array
'0.82572 0.13813 0.28528' '0.68402 0.28481 0.42083' '0.03384 0.86588 0.81445'
char 型で単語の区切りを持ったデータを実現するには cell 配列が必要です。
arrayfun(@num2str,rand(3),'uni',false)
ans = 3×3 cell array
{'0.58046'} {'0.11739'} {'0.52521'} {'0.18829'} {'0.85397'} {'0.3372' } {'0.53425'} {'0.61183'} {'0.77446'}
一方 string 型は、単語の2次元配列を作るのに cell 配列 は不要です。
A = ["AB","CD","EF"; "GH","IJ","KL"]
A = 2×3 string array
"AB" "CD" "EF" "GH" "IJ" "KL"
string 型と cell 配列を組み合わせると更に次元の高いデータ構造を作成できます
{A, A, A; A, A, A}
ans = 2×3 cell array
{2×3 string} {2×3 string} {2×3 string} {2×3 string} {2×3 string} {2×3 string}

추가 답변 (1개)

Hernia Baby
Hernia Baby 2023년 2월 2일
편집: Hernia Baby 2023년 2월 2일
stringを使うのはいかがでしょうか?
なおnum2strは使用する必要はないと思われます。
-----
使い方として
string(rand(3))
ans = 3×3 string array
"0.65981" "0.20228" "0.60163" "0.15499" "0.5295" "0.90098" "0.32025" "0.4607" "0.2324"
もしくは
""+rand(3)
ans = 3×3 string array
"0.31906" "0.64679" "0.97242" "0.37207" "0.07159" "0.87473" "0.85236" "0.86025" "0.090639"
  댓글 수: 2
Hernia Baby
Hernia Baby 2023년 2월 2일
편집: Hernia Baby 2023년 2월 2일
コメント読みました。
num2strは文字配列(character array)に変換するものなので、データ型はchar形式です。
(ですので列数を合わせるために空白で揃えてます。)
Hernia Baby
Hernia Baby 2023년 2월 2일
편집: Hernia Baby 2023년 2월 2일
ちなみにstring型の登場は2016bからに対して、num2strは2006a以前のものです。
ですのでstringはまだ登場していません。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 文字と文字列에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!