Create a matrix on the basis of other matrix

Hi given a vector
SPI= [2 3 4 8 11 13 14 15 16 19 20];
and the array
AA= [1 2 3 4 0 11 15;
0 0 0 8 13 16 0;
0 0 0 0 0 18 0;
0 0 0 0 0 19 0;
0 0 0 0 0 20 0];
I want to create a matrix DD that is AA but with just the element inside SPI. So:
DD = [ 2 3 4 0 11 15;
0 0 8 13 16 0;
0 0 0 0 0 0;
0 0 0 0 19 0;
0 0 0 0 20 0];
may someone help me?

2 Comments

I notice that you delete the first column of AA as it is left without any elements from SPI. Why are you not also deleting the all-zero row 3 ? Or if the rule is that the first row has to contain an element from SPI, why are you not deleting the column [0; 13; 0; 0; 0] ? What are the rules?
luca
luca on 14 Oct 2019
Edited: luca on 14 Oct 2019
the array SPI could vary and contain all the elements of AA, that instead is fixed. So depending on the value inside SPI I want to derive DD.
Sorry for the third column, was my mistake! now it's fixed

Sign in to comment.

 Accepted Answer

% your data
SPI = [2 3 4 8 11 13 14 15 16 18 19 20];
AA = [1 2 3 4 0 11 14 15;
0 0 0 8 13 16 0 0;
0 0 0 0 0 0 0 0;
0 0 0 0 0 19 0 0;
0 0 0 0 0 20 0 0];
% mask
iMask = ismember(AA,SPI);
% matrix DD with zeros
DD = AA.*iMask;
% now you can filter out the rows and cols of all zeros
DD = DD(:,any(iMask,1)); % cols filter
DD = DD(any(iMask,2),:); % rows filter

6 Comments

imask, sorry changed the name to make it more clear but I didn't check for possible typos. Now I fixed the post
give me this error
The logical indices in position 1 contain a true value outside of the array bounds.
Error
DD = DD(any(iMask,1),:); % cols filter
You are not running the last checked version. Retry with the code available now. Sorry for the confusion
Fabio's suggested code will eliminate the row 0 0 0 0 0 0;
I do not understand at the moment why that row is being kept in the desired solution.
Me neither! but I kept all steps separated to that the OP can pick the parts of his choice

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2019b

Tags

Asked:

on 14 Oct 2019

Commented:

on 15 Oct 2019

Community Treasure Hunt

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

Start Hunting!