Extract data from all values of a containers.Map collection
조회 수: 34 (최근 30일)
이전 댓글 표시
Hi all,
Suppose I have a containers.Map key/value collection with n entries (hundreds and more). Suppose all entries have a filed ‘My_Filed’ which is an array of 1x3 doubles.
I want to create a matrix of nx3 from all these values. Of course, I can achieve this by getting all values and use a ‘for loop’ to build the matrix (with pre-allocation for speed).
My question is: is there a faster way to create this matrix?
Thanks,
Alon
댓글 수: 0
채택된 답변
Guillaume
2020년 3월 16일
편집: Guillaume
2020년 3월 16일
This doesn't involve any loop, either explicit or via any of the ***fun functions. However all the structures in the map must have identical fields and all the structures must be scalar:
allvalues = yourmap.values; %extract values, stored as a cell arrays
allvalues = vertcat(allvalues{:}); %convert cell array of N structures into a Nx1 structure array, will fail if at least one structure has different fields
fieldvalues = vertcat(allvalues.My_Filed); %extract field into a Nxm matrix. Will fail if at least one field is not the same size as the others
추가 답변 (1개)
Mohammad Sami
2020년 3월 16일
I assume that each of value in the container is a struct with identical fields.
You can just get all the values like this
% M = containers.Map
valueSet = values(M); % this will return a cell array of structs.
My_Filed = cellfun(@(x)x.My_Filed,valueSet,'UniformOutput',false);
My_Filed = vertcat(My_Filed{:});
댓글 수: 2
참고 항목
카테고리
Help Center 및 File Exchange에서 Graphics Object Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!