MATLAB : 구조 배열로 필드가있는 구조 배열의 총 길이/크기 결정
-
20-09-2019 - |
문제
다양한 길이의 구조 배열로 필드를 포함하는 구조 배열이 있습니다. 예를 들어:
's'는 's'의 구조 '데이터'입니다. 's'의 필드이며 구조 배열 자체이며
length(s(n).data) ~= length(s(m).data)
나는 모든 필드 s.data.timestamp에서 타임 스탬프를 취하는 배열을 prealloce하고 싶습니다. For Loop을 두 번 사용하지 않고이 작업을 수행하는 방법이 있습니까? 이것이 내가 지금까지 가지고있는 것입니다.
% find the total length
count=0;
for x=1:length(s)
count=count+length(s(x).data);
end
% preallocate timestamp array
timestamp=zeros(1,count);
% populate timestamp array
index=1;
for x=1:length(s)
for y=1:length(s(x).data)
timestamp(index)=s(x).data(y).timestamp;
index=index+1;
end
end
'S'의 길이와 '데이터'의 평균 길이를 기준으로 필요한 길이를 과대 평가하는 것에 대해 생각했지만 각 '데이터'필드/하위 구조의 실제 길이는 크게 다릅니다. 도대체를 과대 평가하고 나중에 결과 배열을 다듬는 것이 더 좋을까요? 제로 타임 스탬프는 내가 작업하는 데이터 세트에서는 불가능하므로 문제가되지 않아야합니다.
해결책
모든 구조 배열이 있으면 작동합니다 data
필드가 동일하고 행 벡터가 있습니다 (즉 1 x-n):
allData = [s.data]; %# Concatenate all data arrays into one
timestamp = [allData.timestamp]; %# Collect all the time stamps
만약 data
구조 배열은 열 벡터입니다 (즉 n-by-1), 당신은 사용해야합니다 vertcat
대신에:
allData = vertcat(s.data); %# Concatenate all data arrays into one
timestamp = [allData.timestamp]; %# Collect all the time stamps
위의 솔루션은 구조 배열의 단일 필드에 액세스하는 것이 a를 반환한다는 사실로 인해 작동합니다. 쉼표로 구분 된 목록.
제휴하지 않습니다 StackOverflow