我的代码如下:
N=10;
R=[1 1 1 1 1 0 0 0 0 0;1 1 1 1 1 1 1 1 1 1];
p=[0.1,0.2,0.01];
B = zeros(N , N);
B(1:N,1:N) = eye(N);
C=[B;R];
for q=p(1:length(p))
Rp=C;
for i=1:N
if(rand < p)
Rp(i,:) = 0;
end
end
end
从此代码中我改变了p
的值。因此,对于p
的不同值,我会得到不同的Rp
。现在我想从每个Rp
矩阵中得到“1”的总数。它意味着可能是p1我得到Rp1 = 5,对于p2,Rp = 4。
例如
Rp1=[1 0 0 0 0;0 1 0 0 0;0 0 0 0 0],
Rp2=[1 0 0 0 0;0 1 0 0 0;1 0 0 0 0],
Rp3=[0 0 0 0 0;0 1 0 0 0;0 0 0 0 0],
总结果为2,3,1。
我想得到这个结果。
答案 0 :(得分:2)
假设Rp是你的矩阵,那么只需执行以下操作之一:
如果矩阵只包含0和1
sum(Rp(:))
或者,如果您的矩阵包含多个值:
sum(Rp(:)==1)
请注意,对于二维矩阵sum(Rp(:))
与sum(sum(Rp))
我认为你真正的问题是如何保存这个结果,你可以通过将它分配给索引的可变数据来实现,例如:
S(count) = sum(Rp(:));
这将要求您添加一个计数变量,该变量随循环的每一步增加一个。在循环之前正确初始化变量是很好的做法(也是有效的):
S = zeros(length(p),1);
答案 1 :(得分:2)
如果矩阵仅包含0
和1
,那么您正在尝试计算非零值,并且有一个名为nnz
的函数
n = nnz(Rp);
正如我在评论中提到的,你应该替换
if(rand < p)
带
if(rand < q)
然后,您可以将非零值的数量添加到矢量,如
r = [];
for q=p(1:length(p))
Rp=C;
for i=1:N
if(rand < p)
Rp(i,:) = 0;
end
end
r = [r nnz(Rp)];
end
然后r
将包含您想要的结果。如其他答案和评论中所述,有许多方法可以改进您的代码。
答案 2 :(得分:0)
如果您需要计算任何矩阵M
中的1,您应该可以sum(M(:)==1)