我已经创建了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))
答案 0 :(得分:2)
您只需使用enumerate
>>> sum(o for i, a in enumerate(X) for j, o in enumerate(a) if i!=j)
0
i
和j
分别是行(第一个暗淡)和列(第二个暗淡)索引
答案 1 :(得分:2)
这有效地取得了2D数组的非对角线元素的总和。使用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 :(得分:1)
这应该有效
sum([sum(row) - (row[i] if len(row) < i else 0) for i,row in enumerate(X)])
它遍历2d数组中的每一行,并对其求和,然后取出i
单元格(如果存在),以便它不会进入总和