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

17 vues (au cours des 30 derniers jours)
takeru misawa
takeru misawa le 13 Sep 2021
Modifié(e) : takeru misawa le 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,〇〇)」)と書くのは大変なので。。。

Réponse acceptée

Hernia Baby
Hernia Baby le 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 commentaire
takeru misawa
takeru misawa le 13 Sep 2021
Modifié(e) : takeru misawa le 13 Sep 2021
ご回答いただきありがとう御座います。実際にいま作成している分析スクリプトに上記の内容を少し修正したものを加えたところ、無事に実行することができました。
すぐにお返事いただき大変感謝しております。このような発想がすぐできるように私もなりたいですね。。。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 構造体 dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!