0

我有一个这样的矩阵:

一个=

 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 个独立矩阵,每个矩阵应该有 30% 1个元素比原始矩阵少。

这是我用来执行此操作的代码:

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 并将其 1 元素的 30% 替换为 0。但是第二次它将上一步的结果矩阵作为 A(不是原始的矩阵)并用 0 替换该矩阵中剩余的 1 个元素的 30%,并一次又一次地执行 10 次,最后它只给了我 1 个矩阵,如下所示:

一个=

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

4

1 回答 1

2

Your original A is changing every time because of the last line in your loop A(A_ones_change) = 0;. Change it to some copy of A (say, A1 = A) you make in the beginning of the loop.

于 2013-08-19T18:21:47.643 回答