Extract X number of elements in 3D matrix based on another matrix

2 views (last 30 days)
Hello,
I have a 3D Matrix A (3x3x5) that is sorted in descending order and another Matrix B (3x3) which has the first X number of elements in Matrix A that I would like to extract and store in a blank matrix C (3x3x5). Matrix B has different first elements to extract, so I would like the rest of the elements in the 3D matrix C to be zero if there isn't anything copied from A. Let's say there are 2 values that I want to extract at element 1x1x1:5, then cell 1x1x1:2 in Matrix C will be 10; 5; 0; 0;0
Example of Matrix A and B: A=randi(10,3,3,5); B=[NaN 2 1; 2 NaN 2;NaN 4 3];
Thank you for the help.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 20 Jun 2017
Edited: Andrei Bobrov on 20 Jun 2017
A=randi(10,3,3,5);
B=[NaN 2 1; 2 NaN 2;NaN 4 3];
[m,n,k] = size(A);
B(isnan(B)) = 0;
out = permute(reshape((1:k)'*ones(1,m*n) <= B(:)',[],m,n),[2,3,1]).*A; %2016b and later
out = permute(reshape(bsxfun(@le,(1:k)'*ones(1,m*n),B(:)'),[],m,n),[2,3,1]).*A; %2016a and earlier
  2 Comments
Vesp
Vesp on 20 Jun 2017
Thank you very much for your help Andrei! This is useful code to learn for the future :)
Vesp
Vesp on 23 Jun 2017
Edited: Andrei Bobrov on 23 Jun 2017
Andrei I was wondering if you could break down exactly what this code does. It is extracting correctly, but for some reason when I apply it to my code I am not getting the correct answer.
The main idea of my code is to sort total IVT and then sort the x and y component, then use this piece of code to extract the "top N" values defined in a matrix (in this example Matrix B). When I calculate the magnitude of the separate x and y components they do not match that of the total IVT. There is a difference of up to 50 between some of the elements.
If it helps to see the entire code I have asked a question in the following link. My effort to figure this out was of no avail. I appreciate the help and time.

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!