说我有一个大小为1- 的向量 - x
,名为X
。我需要保留X
的10%最大元素,并将所有其他元素设置为零。使用sort
:
X = sort(abs(X),'descend');
DIM = floor(length(X)*(0.1));
X(DIM+1:end) = 0;
但是不允许扰乱原始矢量X
的顺序(或者如果我打扰原始顺序,在归零后,我应该恢复原始顺序,我不知道如何)。怎么办呢?
答案 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);