【发布时间】:2011-01-27 10:41:05
【问题描述】:
我真的对具有多个维度的 numpy 数组的索引逻辑感到困惑。这是一个例子:
import numpy as np
A = np.arange(18).reshape(3,2,3)
[[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17]]])
这给了我一个形状为 (3,2,3) 的数组,为了论证起见,称它们为 (x,y,z)。现在我想要一个数组 B,其中 A 中的元素对应于 x = 0,2 y =0,1 和 z = 1,2。喜欢
array([[[ 1, 2],
[4, 5]],
[[13, 14],
[16, 17]]])
我天真地以为
B=A[[0,2],[0,1],[1,2]]
会做这项工作。但它给了
array([ 2, 104])
并且不起作用。
A[[0,2],:,:][:,:,[1,2]]
完成这项工作。但我仍然想知道我的第一次尝试有什么问题。做我想做的事的最佳方法是什么?
【问题讨论】:
-
我个人的看法:你的两种方式都会触发 Numpy 的高级索引。在高级索引上下文中, A[[0,2],[0,1],[1,2]] 被解释为“选择了每个维度中的每个索引号(有点贪婪的方法)。