如何从Python / numpy中的nd-array中的每一行中选择不同的列?

时间:2017-09-26 11:52:29

标签: python arrays numpy indexing

假设我有3 x 2矩阵

A = np.arange(3*2).reshape(3,2)

并希望按索引数组

选择元素
I = [0, 1, 0]

获取

[[0],[3],[4]]

我该怎么做?

以这种方式写作

A[:,[0,1,0]]

给出了完全不同的东西(什么?)

1 个答案:

答案 0 :(得分:3)

您可以做的是传递第一维值的可迭代,以及第二维的可迭代(例如列表)。类似的东西:

I = [0, 1, 0]
A[range(len(I)),I]

这会产生:

>>> A[range(len(I)),I]
array([0, 3, 4])

如果您想要它作为二维数组,您可以使用额外的重塑:

>>> A[range(len(I)),I].reshape(-1,1)
array([[0],
       [3],
       [4]])
A[:,[0,1,0]]
     

给出了完全不同的东西(什么?)

它创建一个矩阵,其中第一个列是0的第一个(A)列,第二个列是第二个( 1的{​​{1}})列,第三列又是A的第一列(0)。