基于其他数组访问Numpy Arary

时间:2018-11-08 12:50:22

标签: python numpy

我有一个大小为[2,10]的Numpy数组A。我还有另一个长度为10的数组B,其值的范围在0到1之间。我现在要访问A,为每一列获取B指定的行,这意味着: 输出的长度应为10,如果B [i] == 0,则结​​果数组中的第i个条目为A [0,i],否则为A [1,i]。 如何正确/最优雅地编制索引? 谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.choose

>>> a
array([[ -3,   2,   5,   0,  -2,  12,   5,  -1, -12,   5],
       [ -8, -12,  15,   6,   2,  -3,   4, -17,   0,   7]])
>>> b
array([1, 0, 0, 1, 1, 1, 1, 1, 0, 1])
>>> np.choose(b, a)
array([ -8,   2,   5,   6,   2,  -3,   4, -17, -12,   7])

第一个参数b是包含选项值的数组,下一个参数是每个选项值的2d数组。

如您所见,对于索引i,其中b[i] == 0,则对应第一行a[0][i]的值,对于b[i] == 1,我们得到{{1 }}。可以很容易地概括出更多的值。

或者我们可以使用numpy.where并传递子数组:

a[1][i]

答案 1 :(得分:0)

我相信这会起作用:

A[1][i] if B[i] == 0 else A[0][i]