2009-07-14 4 views
2

예 : >>w = whos;의 출력은 구조체 배열을 반환합니다. 각 요소의 특정 필드 이름에서 요소가 스칼라 인 배열을 생성하고 싶습니다.MATLAB : 구조체 배열에서 수집

이 작업을 수행하는 가장 확실한 방법은 원하는대로 배열을 반환하지 않지만 각각 별도로 응답합니다.

>> w(1:2).bytes 
ans = 
    64 
ans = 
    128 

나는 루프로 처리 할 수 ​​있지만 더 좋은 방법이 있는지 궁금해하고 있습니다. 표현 주변

답변

10

넣어 대괄호, cat를 사용하여이 같은 상황에서 즉

[w(1:2).bytes] 
+0

감사합니다. – second

2

는 더 일반적인 목적이다. 당신은 문자열의 무리와 함께 같은 일을하고 싶어한다고 가정 한 다음, [] 방법은 작동하지 않을 것입니다, 당신은 사용해야 할 것 :

cat(1,w(1:2).class) 

그리고 위의 경우에

,

cat(1,w(1:2).bytes) 

또한 성능 향상을 위해 MATLAB에서 항목을 열로 유지하고자 할 수 있습니다.

+0

문자열 길이가 같지 않으면 위의 코드에서 오류가 발생합니다. 이 경우 STRVCAT을 사용해야합니다. – gnovice

+0

감사! 나는 그것을 염두에 두겠다. – Jacob

6

구조체 배열의 필드에 액세스하면 comma-separated list (또는 CSL)의 결과가 반환됩니다. 즉, 귀하의 예제의 출력 :

w(1:2).bytes 

입력하는 것과 같습니다

64, 128 

같은, 당신은 CSL 사용 될 수있는 모든 장소에서 출력을 사용할 수 있습니다. 다음은 몇 가지 예입니다.

a = [w(1:2).bytes];   % Horizontal concatenation = [64, 128] 
a = horzcat(w(1:2).bytes); % The same as the above 
a = vertcat(w(1:2).bytes); % Vertical concatenation = [64; 128] 
a = {w(1:2).bytes};   % Collects values in a cell array = {64, 128} 
a = zeros(w(1:2).bytes); % Creates a 64-by-128 matrix of zeroes 
b = strcat(w.name);   % Horizontal concatenation of strings 
b = strvcat(w.name);  % Vertical concatenation of strings