2011-03-13 6 views
3

필드 이름 목록이 있고 중첩 구조체를 생성하려고합니다. 나는이 시도 : ". 동적 구조 참조에 인수가 유효한 필드 이름으로 평가해야한다"표기 ". {필드 이름)은"전용 (동적 구조 참조 용입니다Matlab의 동적 구조 생성

fn1 = {'a', 'b', 'c'}; 
fn2 = {'d', 'e', 'f'}; 
s = struct(); 
for n1=fn1 
    for n2=fn2 
    s.(n1).(n2) = 0 ; 
    end 
end 

하지만 matlab에 불만).

isfield() 및 struct()를 사용하여 필드 이름을 반복하는 방법을 알고 있습니다. 그렇다면 isfield() 및 struct()를 사용하지 않고 어떻게이 목표를 달성 할 수 있습니까? 익명의 기능과 벡터화를 통해? 감사합니다

답변

5

귀하의 주된 문제는 n1n2은 유효한 구조체 이름이 아닌 셀 배열입니다. 따라서, 쓰기

s.(n1{1}).(n2{1}) = 0; 

이 오류를 수정합니다.

그러나, 더 나은 방법을 만들 수 CELL2STRUCT을 사용할 수 있습니다 s :

s2 = cell2struct(cell(size(fn2(:))),fn2(:)); 
s = cell2struct(repmat({s2},size(fn1(:))),fn1(:))