首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy索引重新排序数组

Numpy索引重新排序数组
EN

Stack Overflow用户
提问于 2016-06-21 08:46:12
回答 1查看 403关注 0票数 4

我刚刚被一种粗俗的指数行为绊倒了,我不太明白。看起来numpy正在改变我的轴的顺序,这取决于索引模式。不幸的是,我在文档中找不到对以下内容的解释。有人能跟我解释一下发生了什么吗?

代码语言:javascript
复制
# This is expected: dimension 1 is reduced to length 1:
print np.ndarray(shape=(3,3,3,3))[:, [0], :, :].shape
>>> (3, 1, 3, 3)

# This is the unexpected behavior:
print np.ndarray(shape=(3,3,3,3))[:, [0], :, 0].shape
>>> (1, 3, 3)

我希望第二个命令屈服(3,1,3)。如果我从第四个维度中选择一个元素,为什么我的前两个维度的形状会改变?提前谢谢!

编辑:我在python 2.7.11的numpy 1.11.0上看到了这个

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 09:35:15

这是预期的行为..。NumPy以不同的方式对待用片索引的轴和用数组索引的轴。默认行为是,生成的形状将在用片索引的轴形状之前先用数组索引得出的轴形状。这意味着,第一种情况是奇怪的,那应该是(1, 3, 3, 3)。但是有人认为,这会使用户混淆一些简单的情况,比如您的情况,所以当所有用数组索引的轴组合在一起时,产生的形状被放置在输出形状的位置,其中数组索引轴集群位于原始数组中。

你可以自己测试:

代码语言:javascript
复制
>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape
(3, 1, 3)

正如你所经历的,这种聪明可能比一贯的行为更令人困惑。NumPy开发人员的共识是,最好不要以不同的方式对待集群数组索引轴,甚至还有允许这种更明智的索引的一个PR实现索引器属性

为了向后兼容性,默认索引不太可能很快改变,尽管它可能会在不久的将来对某些情况发出弃用警告。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37939602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档