如何使用数组索引numpy数组

时间:2018-01-13 23:15:16

标签: python arrays numpy

给定下面定义的数组:

a = np.arange(30).reshape((3, 10)
col_index = [[1,2,3,5], [3,4,5,7]]
row_index = [2,1]

是否可以索引a[row_index, col_index],所以我可以做类似的事情 a[row_index, col_index] =1,然后a成为

[[0,1,2,3,4,5,6,7,8,9], [10,11,12,1,1,1,16,1,18,19], [20,1,1,1,24,1,26,27,28,29]]

因此,为了澄清,在第2行中,第1,2,3和5列设置为1,而在第1行中,第3,4,5,7列也设置为1.

2 个答案:

答案 0 :(得分:2)

或(如果你不喜欢打字)

a[np.c_[row_index], col_index] = 1

甚至更短但仅限Python 2

a[zip(row_index), col_index] = 1

所有这些解决方案的作用是使行和列索引broadcastable互相生成。 np.c_是列连接便利对象。它使1D对象中的列成为可能。 zip曾经基本上做过相同的事情。只是,因为Python 3它返回一个迭代器而不是一个列表,numpy不能处理它们。 (可以做list(zip(row_index)),但这不是短暂的。)

答案 1 :(得分:0)

row_index列表的形状应与col_index列表的形状相同。

a[np.array(row_index)[:, None], col_index] = 1

或者,

a[np.reshape(row_index, (-1, 1)), col_index] = 1

a
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12,  1,  1,  1, 16,  1, 18, 19],
       [20,  1,  1,  1, 24,  1, 26, 27, 28, 29]])