配列を含むMatlab構造体があります。これは、ループ配列の構造体/配列をMatlabの単一の配列に変換します
% here simplified for your convenience
for i = 1:27
info(i).field1 = rand(1,4);
info(i).field2 = rand(1,4);
info(i).field3 = rand(1,4);
そして、(私の値で)埋め経由満ち
info(27).field1 = [];
info(27).field2 = [];
info(27).field3 = [];
次のようになります:具体的には次のように割り当てられている私はこれがしたい
[1048576;0;0;0] [1;0;0;0] [1;0;0;0]
[1047512;0;1064;0] [0,99;0;0,01;0] [1;0;8;0]
[1047900;0;676;0] [0,94;0;0,07;0] [2;0;3;0]
...
配列の単一の値を列として使用してテーブルファイルとして保存できる単一の(27x12)テーブルwritetable(T,'myData.csv', ...')
(テーブルの見出しは次のように見えるかもしれません。無視):
1.A 1.B 1.C 1.D 2.A 2.B 2.C 2.D 3.A 3.B 3.C 3.D
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
1048576 0 0 0 1,00 0 0 0 1 0 0 0
1047512 0 1064 0 0,99 0 0,01 0 1 0 8 0
1047900 0 676 0 0,94 0 0,07 0 2 0 3 0
あるいはさらに良い
1.A 1.B 1.C 1.D 2.A 2.B 2.C 2.D 3.A 3.B 3.C 3.D
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
1048576 0 0 0 100% 0% 0% 0% 1 0 0 0
1047512 0 1064 0 99% 0% 1% 0% 1 0 8 0
1047900 0 676 0 94% 0% 7% 0% 2 0 3 0
私がこれまで試したことはある:
T = table(info) %obviously doesn't work
info
_____________
[1x27 struct]
とセルアレイ
% create a cell array and try to concatenate the arrays in the array
C = struct2cell(info)
Cp = permute(C,[3 1 2]);
Cpx = horzcat(Cp(:,1),Cp(:,2),Cp(:,3));
T = table(Cpx)
T =
Cpx
________________________________________
[4x1 double] [4x1 double] [4x1 double]
[4x1 double] [4x1 double] [4x1 double]
[4x1 double] [4x1 double] [4x1 double]
...
と回避策私はhorzcatがうまくいくと思ったが、何とか私はできるなぜそうでないのか、私の頭を包んでいない。誰かがこれのための解決策を持っていますか?
は、あなたの答えをありがとう!私はいくつかのバリエーションでこれを試しましたが、少し詳しく説明しました: – Honeybear
@Honeybearコメントが途切れたようです。詳細は何ですか? – Suever
構造体に含まれるベクトルは垂直(4x1)なので、 'cell2mat(Cp)'は値を垂直に積み重ねました(27x3構造体は108x3行列になりました)。これを修正するために、構造体に含まれているベクトル(例えば '[1; 0; 0; 0]')を '1 0 0 0 'と' v = v'のように変更しました。どのようにループなしでそれを行うだろう)。その後、それは働いた(27x12テーブル)。どうもありがとう。 P.S .:誤って、改行をしようとしているEnterを押してコメントを送信してください;) – Honeybear