num2strでchar型になる理由

13 ビュー (過去 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 Center および File Exchange文字と文字列 についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!