Matlab:在for循环中排除零值矩阵单元的if条件

Posted

技术标签:

【中文标题】Matlab:在for循环中排除零值矩阵单元的if条件【英文标题】:Matlab: if-conditions to exclude zero-value matrix cells within for-loops 【发布时间】:2016-01-17 05:18:42 【问题描述】:

我有一个矩阵 M:

M=rand(n,m)

和一个长度为 m^n 的数组 K

K=zeros(m^n,1)

数组 K 填充了通过对所有可能的 m^n 个单元格垂直组合的 n 行中的矩阵 M 的值求和而获得的值。长度为 m^n 的辅助数组索引包含对单元格组合的索引引用,以便索引数组的列索引指示矩阵 M 的行和索引数组的值 - 矩阵 M 的列。在下面的示例中对于 4x3 矩阵,Index 数组的第二行 1,1,1,2 对应于单元格 M(1,1)、M(2,1)、M(3,1) 和 M(4 ,2) 等:

Index =

     1     1     1     1
     1     1     1     2
     1     1     1     3
     1     1     2     1
…

然后使用该索引引用来计算存储在 K 中的每个单元组合的值(总和):

for i=1:m^(n)
    for j=1:n
                K(i)= K(i)+M(j,Index(i,j))
    end
end

到目前为止,它工作正常。然而,我需要的是引入一个“if”条件,以便如果矩阵 M 的任何单元格等于零,那么包含此零值(单元格)的任何组合的值也将为零.我试图在 for 循环中引入它:

假设

M(1,1)=0
M(3,1)=0

然后

for i=1:m^(n)
    for j=1:n
        if M(j,Index(i,j))~=0
                K(i)= K(i)+M(j,Index(i,j)) 
        else
            K(i)=0
        end
    end
end

此解决方案似乎不起作用,因为它无法识别与零值单元格关联的单元格组合,我无法找出解决方法。有谁知道如何解决这个问题?谢谢!

【问题讨论】:

【参考方案1】:

如果我理解你的解释正确的话......

一旦您的代码发现矩阵元素等于 0,它应该跳出内部 for 循环,而不是继续求和。试试这个:

for i=1:m^(n)
    for j=1:n
        if M(j,Index(i,j))~=0
                K(i)= K(i)+M(j,Index(i,j)) 
        else
            K(i)=0
            break
        end
    end
end

您还应该注意,对于浮点数,例如由rand 产生的那些,它们可能不完全等于零。

【讨论】:

非常感谢,效果很好!!至于随机生成的数字不完全为零 - 在这种情况下这不是一个真正的问题,因为在算法的前面步骤中零值单元格被明确设置为零,但无论如何感谢您引起我的注意!

以上是关于Matlab:在for循环中排除零值矩阵单元的if条件的主要内容,如果未能解决你的问题,请参考以下文章

matlab中矩阵怎么在for循环中用

MATLAB中如何用for 循环将结果代入矩阵中?

matlab用for循环求矩阵乘法

matlab 如何将for每循环一次产生的矩阵合并成一个大矩阵

matlab 二维矩阵for循环逐行赋值

如何在matlab中保存通过for循环生成的数据?