【问题标题】:conditional sum over a range pythonpython 范围内的条件总和
【发布时间】:2016-10-19 10:01:33
【问题描述】:

我创建了 X 如下

num_locations = 2
X= [ ]
for n in range(num_locations):
X.append([0 for j in range(num_locations)])

现在我想对案例 n != m 的这些 X[n][m] 值求和。这样的结果应该是这样的

X[0][1]+X[1][0]

有没有办法用求和公式来做到这一点?

X[n][m] for n in range(num_locations)for m in range(num_locations))

【问题讨论】:

  • 你快到了:sum(X[n][m] for n in range(num_locations) for m in range(num_locations) if n != m).
  • 修复缩进。此外,如果 num_locations 大于 2,您需要总和,例如 X[0][1] + X[0][2] + X[1][0]...?
  • Evert 的代码可以正常工作! @Leva7 是的,实际上 num_locations 等于 10

标签: python sum conditional


【解决方案1】:

这实际上是对二维数组的非对角元素求和。使用 Numpy 的一种选择可能只是从整个数组的总和中减去主对角线的总和 (np.trace)。

num_locations = 2
X= [[1,2],[2,1]]

import numpy as np
s = np.sum(X) - np.trace(X)
print(s)

输出

4

【讨论】:

    【解决方案2】:

    这应该可以工作

    sum([sum(row) - (row[i] if len(row) < i else 0) for i,row in enumerate(X)])
    

    它遍历二维数组中的每一行,并对它求和,然后取出i 单元格(如果存在),这样它就不会进入求和

    【讨论】:

      【解决方案3】:

      您可以简单地使用enumerate

      >>> sum(o for i, a in enumerate(X) for j, o in enumerate(a) if i!=j)
      0
      

      其中ij 分别是(第一个暗淡)和(第二个暗淡)索引

      【讨论】:

        猜你喜欢
        • 2017-05-29
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2013-08-03
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        相关资源
        最近更新 更多