2014-02-10 7 views
2

나는 구조체의 배열 초기화

AStructX : 7x1 struct array with fields: 
    field1 
    field2 
    field3 
    field4 
    field5 

가 지금은 이전의 구조체처럼 보이는 빈 1x7을 생성 할 구조를 가지고 있지만, 빈 값.

시도했지만 AStructY = repmat(AStructX(1),1,7);AStructX의 값이 복사되었습니다.

는 내가 그것에 값을 추가 할 때 AStructY = repmat(AStructX(1),1,0);, 그것은 MATLAB으로 통과했지만, 코더 생성은 다음과 같은 오류 메시지와 함께 실패 ??? Subscripting into an empty matrix is not supported.

+0

지원되지 않는 경우에는 수행하지 마십시오. 'AStructY = El'을 사용하여 첫 번째 요소를 삽입하는 대신에'AStructY = El'을 사용하십시오 – Daniel

+0

'cell2struct' 접근법은 코더 생성과 호환됩니까? 나는 시험 할 수 없다. – chappjc

답변

2

나는 다음과 같은 가정을 만들 수 있습니다 :
이 1 AStructX 2입니다 -디.
2. 새 구조의 크기를 size(AStructX')으로 지정합니다.
3. 필드 이름이 고정되어 있지 않습니다.

이 작업을 수행하려면 먼저 fieldName에 필요한 다음 값으로 빈 셀에 새로운 구조체를 만들 :

names = fieldnames(AStructX)'; %'// row vector 
len = length(names); %// number of fields 
for i=1:len 
    names{2,i} = cell(size(AStructX')); %'// the contents are empty 
end 
AStructY = struct(names{:}); %// will take the names matrix columnwise 

이 완전히 비어 항목에 ([]를)됩니다, 당신은 값을 초기화 할 경우 0 대신, 루프 내부의 선은

names{2,i} = num2cell(zeros(size(AStructX'))); %'// initialize values to 0 
+0

AStructX는 구조체의 1 차원 배열입니다. 구조체에는 fields1-field5가 있습니다. – aah134

+0

이는 사용자 정의 필드 이름이있는 2 차원의 특별한 경우이며 2 차원 이상의 ** **를 가질 수 없습니다. 이것은 귀하의 예에서 효과적입니다. – scenia

+0

그것은 나에게 배열 요소의 구조체를 주었지만, 가까이에있는 것은 내가 얻으려는 것이 었습니다. – aah134

2

사용 cell2struct된다 :

len = 7; 
fn = fieldnames(AStructX) 
AStructY = cell2struct(repmat({[]},numel(fn),len),fn) 

그러면 내용이 공백 인 동일한 필드를 사용하여 7x1 struct array이됩니다. 1x7을 원한다면 배열 (즉, AStructY = cell2struct(...).')을 트랜스 포즈하십시오.

+1

맞습니다. – scenia

+0

+1 ... 그리고 귀하의 10k에 축하드립니다! :-) –

+2

: D'accummarray','bsxfun','doc'에 감사드립니다 ... – chappjc