num2strでchar型になる理由

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

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 2 Feb 2023
Edited: Atsushi Ueno on 2 Feb 2023
下記の事を知ると良いと思います。説明する事も難しいですが説明してみます。
  • 二種類の異なる文字データ型がある
  • 両者は次元が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}

More Answers (1)

Hernia Baby
Hernia Baby on 2 Feb 2023
Edited: Hernia Baby on 2 Feb 2023
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 Comments
Hernia Baby
Hernia Baby on 2 Feb 2023
Edited: Hernia Baby on 2 Feb 2023
コメント読みました。
num2strは文字配列(character array)に変換するものなので、データ型はchar形式です。
(ですので列数を合わせるために空白で揃えてます。)
Hernia Baby
Hernia Baby on 2 Feb 2023
Edited: Hernia Baby on 2 Feb 2023
ちなみにstring型の登場は2016bからに対して、num2strは2006a以前のものです。
ですのでstringはまだ登場していません。

Sign in to comment.

Categories

Find more on 文字と文字列 in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!