num2strでchar型になる理由

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

Connectez-vous pour commenter.

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 2 Fév 2023
Modifié(e) : Atsushi Ueno le 2 Fév 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}

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur 文字と文字列 dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!