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]]