如何将集合中的某些值清零

时间:2014-04-25 01:59:42

标签: matlab

假设我在小波分解后得到了数百个小波系数..现在我想将最小的10%系数归零 我怎么能在matlab中做到这一点?

3 个答案:

答案 0 :(得分:2)

如果你的小波系数在矢量或矩阵c中,首先让我们从最小的元素中排序

[sc ind]=sort(c(:));

然后将前10%归零:

c(ind(1:round(numel(sc)*0.1)))=0;

此代码适用于1D和2D情况(实际上这也适用于第N维情况)

答案 1 :(得分:1)

您可以先使用mean()命令获取矢量/矩阵的所有元素的平均值。

“帮助意味着”会更好地解释它的作用比你更好。然后你可以运行一个for循环来运行整个数组。在那里,你有一个看起来像

的if语句

如果矩阵(i,j)< =(您先前计算的平均值)/ 5

矩阵(i,j)= 0

这是我第一次在StackExchange上回复,所以如果我犯了任何可怕的错误,请告诉我。

答案 2 :(得分:0)

你可以组合'sort','floor'和'length'命令;假设您的数字存储在向量'a'中:

b=sort(a);
b=b(1,floor(length(a)/10))=0;

如果你的订购标准忽略了这个标志,你可能需要/需要在第一行之前调用'abs(b)'。