【问题标题】:How do I compute the sum of a subset of elements in a matrix?如何计算矩阵中元素子集的总和?
【发布时间】:2011-04-11 17:35:43
【问题描述】:

我想计算矩阵中可被 2 整除的元素的总和。我该怎么做?以及如何以坐标形式输出答案?

【问题讨论】:

    标签: matlab matrix indexing sum


    【解决方案1】:

    一些伪代码。几乎每一行的每一列都循环。

    sum = 0
    for(i = 0; i < matrix.num_rows; i++) {
      for(j = 0; j < matrix.num_cols; j++) {
        if(matrix[i][j] % 2 == 0)
          sum += matrix[i][j]
      }
    }
    

    不知道你所说的坐标形式是什么意思。

    【讨论】:

    • OP 将 MATLAB 标记为语言。应该避免循环,因为矢量化通常要快得多。 Gnovice 的解决方案甚至可以精简为一行:sum(M(mod(M,2)==0))
    • 哇,谢谢。我想我没有意识到 OP 最初将其标记为 MATLAB。我的错。
    【解决方案2】:

    这是矩阵M,只有偶数:

    (mod(M,2) == 0).*M

    您可以将其与sum(M)sum(sum(M)) 相加(不确定“坐标形式”是什么意思)。

    【讨论】:

    • MATLAB 没有 % 运算符。你想要MOD% 用于制作 cmets。
    • @gnovice - 谢谢,这就是你打字太快的结果:)
    • 没问题。在使用过许多其他将% 作为运算符的语言之后,很容易忘记这一点。
    【解决方案3】:

    如果您有一个矩阵M,您可以使用MOD 函数找到偶数元素所在位置的logical index(即掩码),该函数无需循环即可对整个矩阵进行操作。对于矩阵中为偶数的元素,除以 2 后为 0:

    index = (mod(M,2) == 0);
    

    您可以使用函数FIND获取这些偶数条目的行和列索引:

    [rowIndices,colIndices] = find(index);
    

    您可以通过使用上面的逻辑掩码索引M 来获取偶数元素的总和,以提取偶数条目并使用SUM 函数将它们相加:

    evenSum = sum(M(index));
    

    这是一个使用函数MAGIC 创建的矩阵M 的示例:

    >> M = magic(3)
    
    M =
    
         8     1     6
         3     5     7
         4     9     2
    
    >> index = (mod(M,2) == 0)
    
    index =
    
         1     0     1     %# A matrix the same size as M with
         0     0     0     %#   1 (i.e. "true") where entries of M are even
         1     0     1     %#   and 0 (i.e. "false") elsewhere
    
    >> evenSum = sum(M(index))
    
    evenSum =
    
        20
    

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2018-09-15
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2015-05-17
      • 1970-01-01
      相关资源
      最近更新 更多