【发布时间】:2018-09-17 01:41:54
【问题描述】:
试图了解 numpy 在超过 2 维索引时如何选择元素。
import numpy as np
x = np.arange(24).reshape(2,3,4)
x[:,:,0].shape #(2, 3)
在写作x[:,:,0] 时,我选择了沿“深度”、所有“行”和第一列的所有元素。当从视觉上考虑这一点时,我会认为 numpy 会返回形状为 (2,3,1) 的东西,但最后一个维度被删除了。这是合理的,但 numpy 如何填充结果?即在这个例子中,为什么x[:,:,0] 导致元素[0,12] 形成第一列。只是想弄清楚出于某种原因我目前不理解的一般逻辑。
【问题讨论】:
-
如果您从一维数组开始,
x[0]可能会有所帮助。然后是一个二维数组,x[:,0]或x[0,:]等。numpy 尝试在所有维度上保持一致。还可以使用列表或切片探索索引。 -
好主意 - 我可能只需要重新阅读文档,不知道为什么我没有得到这个显然很简单
-
@Alex 可能有助于将索引中的从左到右视为“从头到尾”轴。然后最后一个轴是显示数组时从左到右打印的轴。从最后一个轴获取每个第一个元素。现在不要忘记我们不想从其他轴上取下括号(因为我们为它们取了完整的切片)。这给出了你的结果。请注意,您也可以将其写为
x[..., 0]。 -
@miradulo 你能扩展一下吗?我不确定我是否清楚你的意思
-
我不确定 :P 也许 hpaulj 建议从一维数组开始并逐步提高可能会更有帮助。
标签: python arrays numpy indexing slice