Cell配列の連結に伴う要素数の追加

10 Ansichten (letzte 30 Tage)
takeru misawa
takeru misawa am 13 Sep. 2021
Bearbeitet: takeru misawa am 13 Sep. 2021
の質問にございます。Hernia Baby 様が回答くださっている記事に関して
A = struct2cell(matfile3);
name = fieldnames(matfile3);
for i = 1:size(A,1)
Output.(name{i}) = [A{i,1}, A{i,2}];
end
Output
の部分なのですが、入力するmatfile(フィールドなどの構造は同じ)の数を可変にしたい場合、どのようにすればいいですか。マットファイルの数が変数Xとおいて考えた場合のコードがいまいちわかりません。
例えば、X = 5だとして
A = struct2cell(matfile3);
name = fieldnames(matfile3);
for i = 1:size(A,1)
Output.(name{i}) = [A{i,1}, A{i,2}, A{i,3}, A{i,4}, A{i,5}];
end
Output
と同じ結果になるようにしたいです。(毎回、「A(i,〇〇)」)と書くのは大変なので。。。

Akzeptierte Antwort

Hernia Baby
Hernia Baby am 13 Sep. 2021
読み込むのも自動化しましょう
clear,clc;
matnames = dir('*.mat');
ここがミソです
最初を空集合にして、名前の数だけloadしたものを格納してます
matfile3 = [];
for i = 1:length(matnames)
tmp = load(fullfile(matnames(i).folder,matnames(i).name));
matfile3 = [matfile3; tmp.S1] ;
end
A = struct2cell(matfile3);
name = fieldnames(matfile3);
ここでも同様に空集合tmpを使い、1列ずつ連結しています
for i = 1:size(A,1)
tmp = [];
for j = 1:size(A,2)
tmp = [tmp, A{i,j}];
end
Output.(name{i}) = tmp;
clear tmp
end
Output
Output = struct with fields:
a: [1 2 3] b: [2 3 4 5 6 7] c: 'test1test2test3'
  1 Kommentar
takeru misawa
takeru misawa am 13 Sep. 2021
Bearbeitet: takeru misawa am 13 Sep. 2021
ご回答いただきありがとう御座います。実際にいま作成している分析スクリプトに上記の内容を少し修正したものを加えたところ、無事に実行することができました。
すぐにお返事いただき大変感謝しております。このような発想がすぐできるように私もなりたいですね。。。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!