【问题标题】:Matlab: if-conditions to exclude zero-value matrix cells within for-loopsMatlab:在for循环中排除零值矩阵单元的if条件
【发布时间】: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

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

【问题讨论】:

    标签: arrays matlab if-statement for-loop matrix


    【解决方案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 产生的那些,它们可能不完全等于零。

    【讨论】:

    • 非常感谢,效果很好!!至于随机生成的数字不完全为零 - 在这种情况下这不是一个真正的问题,因为在算法的前面步骤中零值单元格被明确设置为零,但无论如何感谢您引起我的注意!
    猜你喜欢
    • 2015-02-20
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多