avo*_*ado 6 python indexing numpy
例如,我有两个numpy数组,
A = np.array(
[[0,1],
[2,3],
[4,5]])
B = np.array(
[[1],
[0],
[1]], dtype='int')
Run Code Online (Sandbox Code Playgroud)
并且我想从中的每一行提取一个元素A,并且该元素被索引B,所以我想要以下结果:
C = np.array(
[[1],
[2],
[5]])
Run Code Online (Sandbox Code Playgroud)
我试过了A[:, B.ravel()],但是会播放B,不是我想要的。还调查了一下np.take,似乎不是解决我的问题的正确方法。
不过,我可以用np.choose通过转A,
np.choose(B.ravel(), A.T)
Run Code Online (Sandbox Code Playgroud)
但是还有其他更好的解决方案吗?
您可以使用NumPy's purely integer array indexing-
A[np.arange(A.shape[0]),B.ravel()]
Run Code Online (Sandbox Code Playgroud)
样品运行-
In [57]: A
Out[57]:
array([[0, 1],
[2, 3],
[4, 5]])
In [58]: B
Out[58]:
array([[1],
[0],
[1]])
In [59]: A[np.arange(A.shape[0]),B.ravel()]
Out[59]: array([1, 2, 5])
Run Code Online (Sandbox Code Playgroud)
请注意,如果B是1D数组或此类列索引的列表,则可以直接使用来跳过展平操作.ravel()。
样品运行-
In [186]: A
Out[186]:
array([[0, 1],
[2, 3],
[4, 5]])
In [187]: B
Out[187]: [1, 0, 1]
In [188]: A[np.arange(A.shape[0]),B]
Out[188]: array([1, 2, 5])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |