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

19 Ansichten (letzte 30 Tage)
takeru misawa
takeru misawa am 7 Sep. 2021
Kommentiert: takeru misawa am 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つがあった場合、添付ファイルのようなものを作成するのにはどうすればよいでしょうか。

Akzeptierte Antwort

Hernia Baby
Hernia Baby am 7 Sep. 2021
Bearbeitet: Hernia Baby am 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 Kommentare
Hernia Baby
Hernia Baby am 8 Sep. 2021
Bearbeitet: Hernia Baby am 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 am 9 Sep. 2021
ありがとうございます。非常に助かりました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu cell 配列 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!