MATLAB Answers

Removal of values from cell arrays

2 views (last 30 days)
lucksBi on 15 Mar 2018
Commented: lucksBi on 16 Mar 2018
HI I have following arrays:
I got 'after' array after some calculations which removed some values from 'before' array Now I have another array X(3x7 cell array):
X= {0,1,0,0.9,0.3,[],[]; 0,0.8,0,0,-1,0.6,[]; 1,0.3,0,-0.4,[],[],[]} % [] at end of each cell were added to make it a square matrix.
In X i have got corresponding values for each value in 'before' array. Like 0 is for 2 in before{1,1}. 1 is for 3 in before{1,1}. Similarly for before{2,1} and before{3,1} I have corresponding values in X.
I want to remove those values from X whose corresponding value is removed from 'before'. Like in before{1,1} 2,3,4 are removed so 0,1,0 will be removed from X{1,1} and so on. Final resuly may look like this:
Result= {0.9,0.3; 0.8,0.6; 1,[]}
kindly help


Sign in to comment.

Accepted Answer

Bob Nbob
Bob Nbob on 15 Mar 2018
Is it possible for you to rearrange X to be 3x1 array of matrices like before and after? If so then you can use the following:
for rows = 1:size(before,1);
locations = ismember(before{rows},after{rows});
results(rows) = X{rows}(locations==1);
If you can't reorganize X it's going to be a bit more difficult, but let me know.


Show 5 older comments
lucksBi on 16 Mar 2018
Yes got it. X is like this now:
X = {[0,1,0,0.9,0.3];[0,0.8,0,0,-1,0.6];[1,0.3,0,-0.4]}
but error is still here:
Subscripted assignment dimension mismatch.
results(rows) = X{rows}(locations==1);
Jan on 16 Mar 2018
results{rows} = X{rows}(locations)
lucksBi on 16 Mar 2018
Solved.. Thanks alot @Jan Simon & @Bob Nbob

Sign in to comment.

More Answers (1)

KL on 16 Mar 2018
If all your arrays have consistent dimension, it's a lot simpler. Not very different from the other answer though, just with cellfun,
before={[2,3,4,5,6];[3,4,5,6,7,8];[5,6,7,8];[]}; %added an empty cell
after={[5,6];[4,8];5;[]}; %added an empty cell
%modified X with the same size
X= {[0,1,0,0.9,0.3]; [0,0.8,0,0,-1,0.6]; [1,0.3,0,-0.4];[]}
%now here you get what you want
idx = cellfun(@(x,y) ismember(x,y),before,after,'uni',0);
XX = cellfun(@(x,y) x(y),X,idx,'uni',0)

  1 Comment

lucksBi on 16 Mar 2018
yes it also resolves problem.. Thank You so much for your time.

Sign in to comment.