【发布时间】:2015-10-19 11:12:35
【问题描述】:
我有一个未排序的数字矩阵,我想保留每列的 n 个最大(不一定是唯一的)值,并将其余的值设置为零。
我想出了如何用循环来做到这一点:
a = [4 8 12 5; 9 2 6 18; 11 3 9 7; 8 9 12 4]
k = 2
for n = 1:4
[y, ind] = sort(a(:,n), 'descend');
a(ind(k+1:end),n) = 0;
end
a
这给了我: 一个=
4 8 12 5
9 2 6 18
11 3 9 7
8 9 12 4
k =
2
一个=
0 8 12 0
9 0 0 18
11 0 0 7
0 9 12 0
但是,当我尝试消除循环时,我似乎无法正确建立索引,因为:
a = [4 8 12 5; 9 2 6 18; 11 3 9 7; 8 9 12 4]
k = 2
[y, ind] = sort(a, 'descend');
b = ind(k+1:end,:)
a(b) = 0
这给了我这个:(这不是我想做的) 一个=
4 8 12 5
9 2 6 18
11 3 9 7
8 9 12 4
k =
2
b =
4 3 3 1
1 2 2 4
一个=
0 8 12 5
0 2 6 18
0 3 9 7
0 9 12 4
我索引错了吗?我必须使用循环吗?
我在开始时参考了这个问题,但这并不是我想要做的:How to find n largest elements in an array and make the other elements zero in matlab?
【问题讨论】:
标签: arrays matlab sorting indexing vectorization