matlab - How to delete element from cell arrays after comparisons without causing cell arrays to get empty? -
i created 1d array shows words , in sentences occur. after took intersection show word occurs each of other remaining words in sentence:
occurstogether = cell(length(out1)); ii=1:length(out1) jj=ii+1:length(out1) occurstogether{ii,jj} = intersect(out1{ii},out1{jj}); end end celldisp(occurstogether)
the output of above code below:
occurstogether{1,1} = 4 11 14 occurstogether{1,2} = 1 occurstogether{1,3} = [] occurstogether{1,4} = 1 4 8 14 15 19 20 22 occurstogether{1,5} = 4 11
i want check single element if deletion doesn't cause empty set should deleted if deletion give rise empty set should not deleted.
for example:
step1:
delete 4 {1,1}
and{1,5}
not empty 4 should deleted.
step2:
delete 14 {1,1}
and{1,4}
not empty 14 should deleted.
step3:
if delete 11 {1,1}
and{1,5}
cause empty set because 4
, 14
deleted in step 1
, step 2
should not deleted.
element deletion operations should carried out cells of arrays.occurstogether
declared 1d cell array.
how can code make comparisons , deletions occurstogether
cell array locations?
use following, c
stands occurstogether
cell (shorter, easier read answer). comments in code explain bit corresponding lines do.
c = cell(3,2); c{1,1} = [4 11 14]; c{2,1} = 1; c{2,2} = [1 4 8 14 15 19 20 22]; c{3,2} = [4 11]; celldisp(c) c = cellfun(@unique, c, 'uniformoutput', false); % remove duplicates elements of c numsincell = unique([c{:}]); % numbers in cell, sorted n = numsincell % loop on numbers in cell lsetis1 = cellfun(@numel,c) == 1; % length of set 1 ninset = cellfun(@(set) any(set==n), c); % set contains n nisunique = sum(ninset(:))==1; % n occurs once condition = ~nisunique & ~any(ninset(:) & lsetis1(:)); % set neither contains n , has length of 1, nor n unique if condition % if false sets... c = cellfun(@(set) set(set~=n), c, 'uniformoutput', false); % ... remove n sets end end celldisp(c)
notice use logical indexing in line in for
-loop starting c = cellfun(...
, saves additional for
-loop on elements of c
. matlab function cellfun
performs function handle in first argument on elements of cell in second argument. useful tool prevents use of many for
-loops , if
-statements.
Comments
Post a Comment