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进行求和。