3 demension matrix coding - find largest NN elements

I have (M X N X sample) 3-demension matrix, and i want to change all elements to '0' except the largest 'NN' elements
for example;
when the matrix is (4 X 4 X 2) and NN=2
there are two matrix
1 2 3 4
1 2 1 2
2 1 1 2
and
4 1 2 3
1 2 1 2
1 2 2 1
and i want to change into
0 0 3 4
0 0 0 0
0 0 0 0
and
4 0 0 3
0 0 0 0
0 0 0 0
these two matrix
plz let me know how to change it....

2 件のコメント

Walter Roberson
Walter Roberson 2019 年 8 月 8 日
What do you want to do in the case of duplicates? For example if the original matrix were
1 2 3 4
1 2 1 2
3 1 1 2
then what would you want the output to be for NN=2 ?
Hakjoon Yoon
Hakjoon Yoon 2019 年 8 月 9 日
i want
0 0 3 4
0 0 0 0
0 0 0 0
or
0 0 0 4
0 0 0 0
3 0 0 0
only 'NN' elements are needed

回答 (1 件)

Rik
Rik 2019 年 8 月 9 日

0 投票

You will probably need to loop through the pages. The second output of max should be what you need.
A=rand(4,4,5);
out=A;
element_per_page=size(A, 1)*size(A,2);
for p=1:size(A,3)
[~,order]=sort(A(:,:,p));
ind=order(3:end)+element_per_page*(p-1);
out(ind)=0;
end
(untested code, written on mobile)

この質問は閉じられています。

タグ

質問済み:

2019 年 8 月 8 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by