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

7 views (last 30 days)
takeru misawa
takeru misawa on 7 Sep 2021
Commented: takeru misawa on 9 Sep 2021
変数 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つがあった場合、添付ファイルのようなものを作成するのにはどうすればよいでしょうか。

Accepted Answer

Hernia Baby
Hernia Baby on 7 Sep 2021
Edited: Hernia Baby on 7 Sep 2021
構造体でまずは変数を定義します
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 Comments
Hernia Baby
Hernia Baby on 8 Sep 2021
Edited: Hernia Baby on 8 Sep 2021
■上手くいかない理由
データ型が違うので処理ができない部分があります
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 on 9 Sep 2021
ありがとうございます。非常に助かりました。

Sign in to comment.

More Answers (0)

Categories

Find more on 構造体 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!