嗨,我有一个 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
有没有其他更快的方法来添加/减去数组的特定元素列表?
如果您只是想从索引列表中检索数组中的值并将它们求和,您可以执行以下操作:
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 个特定值,最好像在您的代码中那样明确地执行此操作。