numpy-有没有办法在arr[1、[0,2,0,2,0]]和#x2B;=1. 背景

numpy-有没有办法在arr[1、[0,2,0,2,0]]和#x2B;=1. 背景,numpy,Numpy,+1对于每个元素只发生一次,尽管每个索引元素被引用了多次 a = np.arange(12).reshape((3, 4)) b = a.copy() print(a) --- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] a[1, [0, 2, 0, 2, 0]] += 1 # a[1][0] referenced 3 times and a[1][2] 2 times print(a-b) --- [[0 0 0 0] [1 0 1 0]

+1
对于每个元素只发生一次,尽管每个索引元素被引用了多次

a = np.arange(12).reshape((3, 4))
b = a.copy()
print(a)
---
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

a[1, [0, 2, 0, 2, 0]] += 1  #  a[1][0] referenced 3 times and a[1][2] 2 times
print(a-b)
---
[[0 0 0 0]
 [1 0 1 0]   # <--- +1 occurs only once for a[1][0] and a[1][2]
 [0 0 0 0]]
a=np.arange(12)。重塑((3,4))
b=a.复制()
印刷品(a)
---
[[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]]
a[1,0,2,0,2,0]+=1#a[1][0]引用了3次,a[1][2]引用了2次
打印(a-b)
---
[[0 0 0 0]

[1 0 1 0]#只要此累计加法一次可以沿一个轴工作,您就可以利用
集合。计数器

考虑以下几点:

将numpy导入为np
从收款进口柜台
a=np.arange(12)。重塑((3,4))
b=a.复制()
add_lst=[0,2,0,2,0]
添加=计数器(添加)
[1,list(addlst.keys())]+=list(addlst.values())
打印(a-b)
产出:

[[0]
[3 0 2 0]
[0 0 0 0]]

您正在寻找的是。以下是如何在您的案例中使用它:

np.add.at(a,(1[0,2,0,2,0]),1)
印刷品(a-b)
# [[0 0 0 0]
#  [3 0 2 0]
#  [0 0 0 0]]
从文档中:

对“索引”指定的元素的操作数“a”执行无缓冲就地操作。对于加法ufunc,此方法相当于
a[索引]+=b
,但对索引多次的元素的结果进行累加。例如,
a[[0,0]]+=1由于缓冲,第一个元素只增加一次,而
add.at(a[0,0],1)
将第一个元素增加两次


我想你想要
np.add.at(a[1],[0,2,0,2,0],1)
# Result a
[[ 0  1  2  3]
 [ 7  5  8  7]    <--- +1 three times on a[1][0] and twice on a[1][2]
 [ 8  9 10 11]]

# a-b
[[0 0 0 0]
 [3 0 2 0]   # <--- +3 for a[1][0] and +2 for a[1][2]
 [0 0 0 0]]