如何将矩阵中10%的元素随机替换为零

时间:2012-08-15 19:42:02

标签: matlab

设C为40x40矩阵,对角线为零。如何用零随机替换矩阵中10%的元素?

3 个答案:

答案 0 :(得分:4)

我只是索引矩阵本身而不是@HighPerformanceMark的掩码*矩阵方法:

data=rand(10);

N = numel(data);
data(randperm(N,floor(N/10))) = 0;

答案 1 :(得分:3)

正好10%的元素被0替换为这样的东西可能会让你满意:

mask = [ones(1,1440),zeros(1,160)];
mask = reshape(mask(randperm(1600)),[40,40]);
c.*mask

如果可能接受10%,请尝试

c.*(randi(10,40)<=9)

我猜你可以解决这些问题,如果不是评论。

答案 2 :(得分:2)

我认为最快的方法是将逻辑索引与标量赋值结合使用:

C(rand(size(C)) < 0.1) = 0;

但是这并不会像你指定的那样给你完全 10%。

确切的解决方案是

nC = numel(C);
[~, p] = sort(rand(1, nC));
C(p <= nC/10) = 0;

randperm相同,没有Matlab R2010及更早版本中randperm()的开销。