異なる行数(列数)の​行列の書き出し方法に​ついて(txt, csvなど)

21 ビュー (過去 30 日間)
takeru misawa
takeru misawa 2021 年 9 月 7 日
コメント済み: takeru misawa 2021 年 9 月 9 日
変数 a = 1, b=2 c =3
行列 d= (1 ,2 ,3, 4,5) e= (0.1 ,0.2 ,0.3 ,0.4, 0.5, 0.6)
※dは1*5 , eは1*6の行列
の5つがあった場合、添付ファイルのようなものを作成するのにはどうすればよいでしょうか。

採用された回答

Hernia Baby
Hernia Baby 2021 年 9 月 7 日
編集済み: Hernia Baby 2021 年 9 月 7 日
構造体でまずは変数を定義します
A.a = 1;
A.b = 2;
A.c = 3;
A.d = 1:5;
A.e = A.d*0.1;
cell型に変換していきます
そのあと構造体をcell型に変換します
A = structfun(@num2cell,A,"UniformOutput",false);
B = struct2cell(A);
空白を表現したいのですがここではNaNで空白部分を埋めています
maxLength = max(cellfun(@numel,B));
result = cellfun( @(x) [cell2mat(x), NaN(1,maxLength-numel(x))], B, 'UniformOutput', false);
result = num2cell(vertcat(result{:}));
変数名を連結させます
name = fieldnames(A);
C = [name, result];
NaNを空白に変更します
mask = cellfun(@(x) all(isnan(x)), C);
C(mask) = {''}
C = 5×6 cell array
{'a'} {[ 1]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'b'} {[ 2]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'c'} {[ 3]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'d'} {[ 1]} {[ 2]} {[ 3]} {[ 4]} {[ 5]} {'e'} {[0.1000]} {[0.2000]} {[0.3000]} {[0.4000]} {[0.5000]}
最後に書き出します
writecell(C,"Output.csv");
  3 件のコメント
Hernia Baby
Hernia Baby 2021 年 9 月 8 日
編集済み: Hernia Baby 2021 年 9 月 8 日
■上手くいかない理由
データ型が違うので処理ができない部分があります
result = cellfun( @(x) [cell2mat(x), NaN(1,maxLength-numel(x))], B, 'UniformOutput', false);
cell2mat が cell型をdouble型に変換しています
ここで文字が入るとうまくいきません
■対処法
すべてstring型としてcellに格納します
A.a = 'a';
A.b = 2;
A.c = 3;
A.d = 1:5;
A.e = A.d*0.1;
A = structfun(@num2cell,A,"UniformOutput",false);
B = struct2cell(A);
maxLength = max(cellfun(@numel,B));
% result = cellfun( @(x) [cell2mat(x), NaN(1,maxLength-numel(x))], B, 'UniformOutput', false);
result = cellfun( @(x) [string(x), NaN(1,maxLength-numel(x))], B, 'UniformOutput', false);
result = num2cell(vertcat(result{:}));
name = fieldnames(A);
C = [name, result];
mask = cellfun(@(x) all(ismissing(x)), C);
C(mask) = {''}
C = 5×6 cell array
{'a'} {["a" ]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'b'} {["2" ]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'c'} {["3" ]} {0×0 char} {0×0 char} {0×0 char} {0×0 char} {'d'} {["1" ]} {["2" ]} {["3" ]} {["4" ]} {["5" ]} {'e'} {["0.1"]} {["0.2" ]} {["0.3" ]} {["0.4" ]} {["0.5" ]}
takeru misawa
takeru misawa 2021 年 9 月 9 日
ありがとうございます。非常に助かりました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangecell 配列 についてさらに検索

Community Treasure Hunt

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

Start Hunting!