2016-07-19 1 views
1

배열이 들어있는 Matlab 구조체가 있습니다. 구체적으로는 다음과 같이 할당 :배열 구조체/배열을 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', ...') 다소 (테이블 제목은 다음과 같을 수 있습니다.) 무시 :

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이 효과가있을 것이라고 생각했지만, 어쨌든 나는 할 수있다. 왜 내 머리가 감싸지 않는지. 이것에 대한 해결책을 가진 누군가?

답변

1

horzcat으로 전화하면 Cp의 세 열 (셀 배열로)이 연결됩니다. 그것들은 이미 열이며 따라서 출력은 입력과 같습니다.

당신이 함께 내용을 연결하려면 먼저 cell2mat를 사용하여 행렬로 변환 한 후 table을 만들 array2table에 직접 전달할 수 있습니다. 원래 벡터 대신 4x1을 경우

T = array2table(cell2mat(Cp)); 

업데이트

, 당신은 다음과 같은 작업을 수행 할 수

T = array2table(squeeze(cell2mat(struct2cell(info))).') 
+0

이 답변 주셔서 감사합니다! 몇 가지 변종에서 이것을 시도했지만 조금 자세하게 붙어 있습니다 : – Honeybear

+0

@Honeybear 여러분의 의견이 잘린 것처럼 보입니다. 세부 사항은 무엇입니까? – Suever

+0

구조체에 포함 된 벡터는 세로 (4x1)이므로 'cell2mat (Cp)'는 값을 세로로 쌓았습니다 (27x3 구조체는 108x3 매트릭스가되었습니다). 이 문제를 해결하기 위해 struct에 포함 된 벡터 (예 :'[1; 0; 0; 0]')를'1 0 0 0 '과'v = v'로 변경했습니다. 루프없이 어떻게 할 것인가). 그런 다음 효과가있었습니다 (27x12 테이블). 고마워. P .: 미안, 실수로 회신을하려고하는 입력과 함께 의견을 보내십시오.) – Honeybear