我建立了一个这样的列表:
num_rows和num cols来自列表aaa
for i in range(num_rows):
for j in range(num_cols):
if (aaa[i][j] == 0):
bbb.append((i,j))
pass
pass
现在我有另一个名为ccc with with floats的2d列表。我想使用bbb中的元组作为ccc的索引(特定的行和col)。我需要在特定索引之后做一个np.sum。所以我尝试过这样的事情:
np.sum(ccc[k][l] for (k,l) in bbb)
我是python的新手,我知道这不对。我几乎没有学会如何编写循环...但有没有办法做这样的事情?
谢谢大家。
答案 0 :(得分:0)
使用常规sum
。 np.sum
需要一个类似数组的对象:
sum(ccc[k][l] for (k,l) in bbb)
请注意,如果您使用的是NumPy,则可能不应该使用所有这些列表和非NumPy操作。以下是使用aaa
和ccc
作为NumPy数组的代码:
ccc[aaa==0].sum()
代码少得多,运行速度比基于列表的解决方案快得多。
附加说明:您无需使用pass
结束循环。
答案 1 :(得分:0)
如果aaa
,ccc
都是numpy数组,请使用np.sum(ccc[aaa == 0])
:
>>> import numpy as np
>>>
>>> aaa = np.array([
... [1, 0, 1],
... [0, 1, 0],
... [1, 0, 1],
... ])
>>> ccc = np.array([
... [1, 2, 3],
... [4, 5, 6],
... [7, 8, 9],
... ])
>>> aaa == 0
array([[False, True, False],
[ True, False, True],
[False, True, False]], dtype=bool)
>>> ccc[aaa == 0]
array([2, 4, 6, 8])
>>> np.sum(ccc[aaa == 0])
20