python 范围内的条件和
conditional sum over a range python
我创建了 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))
您可以简单地使用 enumerate
>>> sum(o for i, a in enumerate(X) for j, o in enumerate(a) if i!=j)
0
其中 i
和 j
是 行(第一暗)和 列(第二暗)索引分别
这应该有效
sum([sum(row) - (row[i] if len(row) < i else 0) for i,row in enumerate(X)])
它遍历二维数组中的每一行,并对它求和,然后取出 i
单元格(如果存在),这样它就不会进入 sum
这实际上是对二维数组的非对角线元素求和。使用 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
我创建了 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))
您可以简单地使用 enumerate
>>> sum(o for i, a in enumerate(X) for j, o in enumerate(a) if i!=j)
0
其中 i
和 j
是 行(第一暗)和 列(第二暗)索引分别
这应该有效
sum([sum(row) - (row[i] if len(row) < i else 0) for i,row in enumerate(X)])
它遍历二维数组中的每一行,并对它求和,然后取出 i
单元格(如果存在),这样它就不会进入 sum
这实际上是对二维数组的非对角线元素求和。使用 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