Matlab 如何计算1';总矩阵中的s

Matlab 如何计算1';总矩阵中的s,matlab,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 所以总的结

我有如下代码:

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
所以总的结果是2,3,1


我想得到这个结果。

如果你需要计算任何矩阵
M
中的1,你应该能够做
sum(M(:)==1)
如果你需要计算任何矩阵
M
中的1,你应该能够做
sum(M(:)==1)
假设Rp是你的矩阵,那么只需做以下一项:

如果你的矩阵只包含0和1

sum(Rp(:))
或者,如果矩阵包含多个值:

sum(Rp(:)==1)
注意,对于二维矩阵,
sum(Rp(:)
sum(sum(Rp))


我认为您真正的问题是如何保存此结果,您可以通过将其分配给索引变量来实现,例如:

S(count) = sum(Rp(:));
这将要求您添加一个计数变量,该变量在循环的每一步都会随着一个值的增加而增加。在循环之前正确初始化变量是一种很好的做法(也是有效的):

S = zeros(length(p),1);

假设Rp是您的矩阵,则只需执行以下操作之一:

如果你的矩阵只包含0和1

sum(Rp(:))
或者,如果矩阵包含多个值:

sum(Rp(:)==1)
注意,对于二维矩阵,
sum(Rp(:)
sum(sum(Rp))


我认为您真正的问题是如何保存此结果,您可以通过将其分配给索引变量来实现,例如:

S(count) = sum(Rp(:));
这将要求您添加一个计数变量,该变量在循环的每一步都会随着一个值的增加而增加。在循环之前正确初始化变量是一种很好的做法(也是有效的):

S = zeros(length(p),1);

如果矩阵仅包含
0
1
,则您试图计算非零值,并且有一个函数用于调用该函数

正如我在评论中提到的,您应该替换

if(rand < p)
if(兰德

if(rand
然后可以将非零值的数量添加到向量,如

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=[];
对于q=p(1:长度(p))
Rp=C;
对于i=1:N
if(rand

然后
r
将包含所需的结果。如其他答案和评论中所述,有许多方法可以改进代码。

如果矩阵仅包含
0
1
,则您正在尝试计算非零值,并且有一个函数用于调用

正如我在评论中提到的,您应该替换

if(rand < p)
if(兰德

if(rand
然后可以将非零值的数量添加到向量,如

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=[];
对于q=p(1:长度(p))
Rp=C;
对于i=1:N
if(rand

然后
r
将包含所需的结果。如其他答案和评论中所述,有许多方法可以改进代码。

思考一下
sum(Rp)
?因为你只有1,这将是最简单的方法…
sum(Rp(:)
将起作用,因为Rp是二进制的。
(:)
通过首先线性化我知道的矩阵,使其在所有维度上求和,但我需要将所有的1求和在一起然后我的Rp=2。我不能这样做。我需要得到所有的值Rp值。@Dan如果我使用你的代码,那么它将汇总每个Rp的所有1。但是我需要分别汇总每个Rp的1。我已经编辑了这个问题,请检查。想一想
sum(Rp)
?因为你只有1,这将是最简单的方法…
sum(Rp(:)
将起作用,因为Rp是二进制的。
(:)
通过首先线性化我知道的矩阵,使其在所有维度上求和,但我需要将所有的1求和在一起然后我的Rp=2。我不能这样做。我需要得到所有的值Rp值。@Dan如果我使用你的代码,那么它会将每个Rp的所有1相加。但是我需要将每个Rp的1相加。我已经编辑了这个问题,请检查。这将计算每列的
1
s数,不是在整个矩阵中,我知道,但我需要把所有的1加起来。比如Rp=[1 0 0;0 1 0 0;0 0 0 0 0 0 0]那么我的Rp=2。我不能这样做。嗯
sum(sum(M==1))
@Nick如果我使用你的代码,它会对每个Rp的所有1进行求和。但是我需要对每个Rp的1进行单独求和。这将计算每列
1
的数量,不是在我知道的整个矩阵中,而是我需要将所有1相加。比如Rp=[1 0 0;0 1 0 0;0 0 0 0 0 0 0 0 0 0]那么我的Rp=2。我不能这样做。嗯
sum(sum(M==1))
@Nick如果我使用你的代码,那么它会对每个Rp的所有1进行求和。但是我需要分别对每个Rp的1进行求和。