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

조회 수: 20 (최근 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 CenterFile Exchange에서 cell 配列에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!