Extracting variables from a struct array with many empty structs

3 views (last 30 days)
I have a giant struct array and many of which are empty.
struct array with fields: f1, f2, f3. i.e. Struct Array: StAr(i,j) has StAr(i,j).f1, StAr(i,j).f2,StAr(i,j).f3. But I want to create a new Array by just collecting all the f1 values without using a for loop.
(1) Since many of the structs in the array are empty when I do [StrAr.f1] it gives me a row vector from the non-empty structs. How do I substitute the empty struct values with 0 instead of a matrix.
or
(2) Just get the index of non-empty structs?
Thanks guys

Answers (1)

Andrei Bobrov
Andrei Bobrov on 23 Oct 2012
Edited: Andrei Bobrov on 24 Oct 2012
k = {StAr.f1};
out = zeros(size(k));
nonempty = ~cellfun(@isempty,k);
out(nonempty) = [StAr.f1]; % (1)
idx = find(nonempty); % (2)
EDIT
k = {StAr.f1};
k1 = cellfun(@(x)x(:).',k,'un',0);
ii = cellfun(@isempty,k1);
k1(ii) = {0};
out = cell2mat(k1); % (1)
idx = find(ii); % (2)
EDIT 2
k = reshape({StAr.f1},size(StAr));
k2 = cellfun(@(x)x(:).',k,'un',0);
ii = cellfun(@isempty,k2);
k2(ii) = {nan};
s2 = cellfun('size',k2,2);
out = cell2mat(cellfun(@(x,y)[x,nan(1,y - numel(x))],...
k2,num2cell(ones(size(s2,1),1)*max(s2)),'un',0));
  4 Comments
Sam Da
Sam Da on 23 Oct 2012
In this step: k = {StAr.f1};
the original array structure is flattened out to be a row vector. Can I preserve the array structure and keep it m x n. I am not great with Matlab so please excuse my silly questions.

Sign in to comment.

Categories

Find more on Structures in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!