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

5 次查看(过去 30 天)
takeru misawa
takeru misawa 2021-9-7
変数 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 CenterFile Exchange 中查找有关 構造体 的更多信息

Community Treasure Hunt

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

Start Hunting!