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

2 ビュー (過去 30 日間)
Vesp
Vesp 2017 年 6 月 20 日
編集済み: Andrei Bobrov 2017 年 6 月 23 日
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.

採用された回答

Andrei Bobrov
Andrei Bobrov 2017 年 6 月 20 日
編集済み: Andrei Bobrov 2017 年 6 月 20 日
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 件のコメント
Vesp
Vesp 2017 年 6 月 20 日
Thank you very much for your help Andrei! This is useful code to learn for the future :)
Vesp
Vesp 2017 年 6 月 23 日
編集済み: Andrei Bobrov 2017 年 6 月 23 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by