如何从总矩阵中计算1的数量

时间:2013-10-11 08:04:42

标签: matlab

我的代码如下:

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。

我想得到这个结果。

3 个答案:

答案 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)

如果矩阵仅包含01,那么您正在尝试计算非零值,并且有一个名为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)