我有一个像这样的矩阵:
A =
1 1 1 0 1
0 1 1 0 0
0 0 0 0 1
1 0 0 0 0
0 1 0 1 1
我想用0随机替换例如该矩阵中1个元素的30%,并且例如独立重复此过程10次,并且在工作结束时我必须有10个独立的矩阵,每个矩阵中的每一个都应该具有少于原始矩阵的1个元素的30%。
这是我用来执行此操作的代码:
for i=1:10
f=.3;
A_ones=find(A);
n = round(f*length(A_ones));
A_ones_change = randsample(A_ones,n);
A(A_ones_change) = 0;
end
A
但matlab对此代码所做的事情是它在开始时采用原始矩阵A并用0替换其1个元素的30%。但是第二次将前一步骤的结果矩阵作为A(不是原始矩阵)并用0替换该矩阵中剩余的1个元素的30%,并且一次又一次地将其替换10次,最后它只给出了如下所示的1个矩阵:
A =
0 0 0 0 0
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
如何解决这个问题并让matlab对每个i的'原始矩阵A'执行此过程?
答案 0 :(得分:2)
由于循环A
中的最后一行,您的原始A(A_ones_change) = 0;
每次都在变化。将其更改为您在循环开始时创建的A(例如,A1 = A
)的副本。