1

配列を含む Matlab 構造体があります。具体的には、次のように割り当てられます。

info(27).field1 = [];
info(27).field2 = [];
info(27).field3 = [];

それはループを介して満たされます

% 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);

そして、(私の値で)満たされると、次のようになります。

[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', ...') ように見える Somewhat を使用します (テーブルの見出しは無視される可能性があります):

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 はうまくいくと思っていたのですが、どういうわけかうまくいかない理由がわかりません。これに対する解決策を持っている人はいますか?

4

1 に答える 1

1

への呼び出しは、 (セル配列として)horzcatの 3 つの列を単純に連結します。Cpそれらはすでに列であるため、出力は入力と同じです。

内容を連結したい場合は、最初に を使用して行列に変換し、cell2mat次にこれを に直接渡しarray2tabletable.

T = array2table(cell2mat(Cp));

アップデート

元のベクトルが4x1代わりにある場合は、次のことができます。

T = array2table(squeeze(cell2mat(struct2cell(info))).')
于 2016-07-19T15:21:41.783 に答える