如何让matlab独立重复一个程序?

时间:2013-08-19 18:09:36

标签: matlab loops for-loop random-sample

我有一个像这样的矩阵:

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'执行此过程?

1 个答案:

答案 0 :(得分:2)

由于循环A中的最后一行,您的原始A(A_ones_change) = 0;每次都在变化。将其更改为您在循环开始时创建的A(例如,A1 = A)的副本。