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