我刚刚被一种粗俗的指数行为绊倒了,我不太明白。看起来numpy正在改变我的轴的顺序,这取决于索引模式。不幸的是,我在文档中找不到对以下内容的解释。有人能跟我解释一下发生了什么吗?
# 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上看到了这个
发布于 2016-06-21 09:35:15
这是预期的行为..。NumPy以不同的方式对待用片索引的轴和用数组索引的轴。默认行为是,生成的形状将在用片索引的轴形状之前先用数组索引得出的轴形状。这意味着,第一种情况是奇怪的,那应该是(1, 3, 3, 3)。但是有人认为,这会使用户混淆一些简单的情况,比如您的情况,所以当所有用数组索引的轴组合在一起时,产生的形状被放置在输出形状的位置,其中数组索引轴集群位于原始数组中。
你可以自己测试:
>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape
(3, 1, 3)正如你所经历的,这种聪明可能比一贯的行为更令人困惑。NumPy开发人员的共识是,最好不要以不同的方式对待集群数组索引轴,甚至还有允许这种更明智的索引的一个PR实现索引器属性。
为了向后兼容性,默认索引不太可能很快改变,尽管它可能会在不久的将来对某些情况发出弃用警告。
https://stackoverflow.com/questions/37939602
复制相似问题