Python - 使用索引数组来改变行元素

时间:2016-12-19 17:25:04

标签: python arrays numpy

给出以下数组:

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

1 个答案:

答案 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,))