将矢量的一些最小元素清零而不会干扰顺序

时间:2017-06-28 11:18:36

标签: matlab vector

说我有一个大小为1- 的向量 - x,名为X。我需要保留X的10%最大元素,并将所有其他元素设置为零。使用sort

很容易
X = sort(abs(X),'descend');
DIM = floor(length(X)*(0.1));
X(DIM+1:end) = 0;

但是不允许扰乱原始矢量X的顺序(或者如果我打扰原始顺序,在归零后,我应该恢复原始顺序,我不知道如何)。怎么办呢?

2 个答案:

答案 0 :(得分:2)

您可以使用prctile功能找到您要查找的10%,然后使用logical indexing将其余内容设置为0

X = rand(1e4,1);
TenPrc = prctile(X,90);
X(X<TenPrc) = 0;

答案 1 :(得分:1)

sort函数可以返回已排序数组的索引:

DIM = floor(length(X)*(0.9));
[X, idx] = sort(abs(X)); 
X(1:DIM+1) = 0;

% Restore original indexes
X = X(idx);