嗨我有一个python代码:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = a[0,1]+a[2,2]-a[1,1]
>>> b
>>> 6
还有其他更快的方法来添加/减去数组中特定元素的列表吗?
答案 0 :(得分:2)
如果您只想从索引列表中检索数组中的值,并将它们相加,则可以执行以下操作:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
ind = [[0,1],[2,2],[1,1]]
values = a[zip(*ind)]
b = values.sum()
# b = 2+9+5 = 16
请注意,我将索引ind
设置为索引对列表,因此zip
是必需的。显然,这可以通过多种方式完成。 a[...]
只需要获取按轴分组的索引列表或元组(非numpy数组),即a[(0,2,1),(1,2,1)]
。
现在要进行任意加法或减法,有多种方法可行。例如:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
ind = [[0,1],[2,2],[1,1]] # indices in array
op = [1,1,-1] # 1 for addition, -1 for subtraction
values = a[zip(*ind)]*op
b = values.sum()
# b = 2+9-5 = 6
最后一点:此方法适用于任意大小的索引集(即,这将是您的代码的参数)。对于3个特定值,最好在代码中明确地执行此操作。