2016-09-24 2 views
3

크기가 n * 1 인 구조체가 있다고 가정합니다. 예를 들어 여러 필드 중 하나를 '영역'이라고합니다. 아래 코드를 시도하면 :Matlab의 n * 1 구조체의 특정 필드에서 모든 값을 추출하는 방법

area = I.area 

결과 영역은 구조체의 마지막 위치에서 오는 값 하나만 갖습니다. 다음과 같이 for 루프를 사용하여 제외하고 필드의 모든 값을, 정확한 어떤 빠른 방법이 있나요 :

for ii = 1:n; area(ii) = I(ii).area; end 

답변

1

을 모든 값의 수평 연결 발생합니다 간단한 [] 구조체의 주위에 사용. 대신 다른 차원을 따라 연결하려는 경우 cat을 사용하여이를 명시 적으로 지정할 수 있습니다. 이렇게하면 여러 값을 포함 할 수있는 필드를보다 잘 처리 할 수 ​​있습니다.

% Concatenate them along the first dimension 
out = cat(1, I.area); 

% Concatenate them along the third dimension 
out = cat(2, I.area); 

선택적으로, 필드는 모든 다른 치수 인 경우, 다음과 같은 영역 필드는 각각의 위치에서 하나 개의 값을 갖는 경우, 작동 cell

out = {I.area}; 
+0

답변 해 주셔서 감사합니다. – jingweimo

1
area = [I.area] 

I.area 반환 I(1).area의 모든 값, I(2).area는 쉼표로 구분 된 목록으로 ...하는 그러한 목록이 예상되는 곳에 연결될 수 있습니다. 함수 매개 변수 목록 또는 배열 초기화.

EDIT : 모두 I(i).area이 동일한 크기의 행 벡터 인 경우. 그럼 당신은 먼저 원하는 치수로 재편, 수평으로 모두를 연결할 수 있습니다 :

area = reshape([I.area], [2 length(I)])' 

결과 :

>> I.area 

ans = 

    3  4 


ans = 

    5  6 


ans = 

    7  8 

>> reshape([I.area], [2 length(I)])' 

ans = 

    3  4 
    5  6 
    7  8 
+0

로 차례 I (1) .area = 1. 항목에 두 개의 값 I (1) .area = [1, 2]가 있으면 어떻게됩니까? 열 또는 행으로 형성되는 것이 아니라 행렬로 구성되는 것처럼 이러한 값을 추출 할 수 있습니까? 예 : – jingweimo

+0

I (1) .area = [1, 2], I (2) .area = [3, 4]이면 출력이 [1, 2; 3, 4]. – jingweimo

+0

'area'가 2x1 벡터 인 경우를 처리하려는 경우 다음 번 질문에서 명시 적으로 말하여 응답자가 실제로 의미하는 것을 추측 할 필요가 없도록하십시오. 그리고이 영역'(ii) = I (ii) .area '는'I.area '가 스칼라임을 강력히 시사합니다. 어쨌든 vector'area '는'reshape '로 쉽게 처리 할 수 ​​있습니다. 나는 그것을 반영하기 위해 나의 대답을 편집했다. –