【发布时间】:2018-03-07 15:18:16
【问题描述】:
假设我有 3 x 2 矩阵
A = np.arange(3*2).reshape(3,2)
并希望通过索引数组选择元素
I = [0, 1, 0]
得到
[[0],[3],[4]]
我该怎么做?
这样写
A[:,[0,1,0]]
提供完全不同的东西(什么?)
【问题讨论】:
标签: 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]]
提供完全不同的东西(什么?)
【问题讨论】:
标签: python arrays numpy indexing
您可以做的是传递第一个维度值的iterable,以及第二个维度的iterable(例如列表)。比如:
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]]提供完全不同的东西(什么?)
它创建一个矩阵,其中 first 列是A 的第一列 (0),second 列是第二列 (1) A 的列,第三列又是A 的第一列 (0)。
【讨论】:
numpy 中有没有像min、max 等聚合语义的函数?
np.min、np.max等
np.select(A, I, axis=1, keepdims=True)?
np.choose 可能是最接近的,但它适用于第一个维度,因此您可以先转置,然后再进行处理。