给出以下数组:
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
我可以创建一个索引数组:
b = np.array([0, 2, 0, 1])
并使用索引来改变每行中的一个元素:
a[np.arange(4),b] += 10
产生:
[[11 2 3]
[ 4 5 16]
[17 8 9]
[10 21 12]]
是否有更可读的方式来实现相同的结果,而不是a[np.arange(4),b] += 10
?
答案 0 :(得分:0)
也许更明确地写出来有助于"可读性":
x = np.array([0, 2, 0, 1])
y = numpy.arange(x.size)
a[y, x] += 10
否则,在我看来,你是以一种非常明确和简洁的方式做到的。
另一种选择是使用ufunc
:
numpy.add.at(a, [y,x], 10)
或者如果您不想使用numpy.arange
:
y = numpy.indices((x.size,))