繁体   English   中英

Numpy索引重新排序数组

[英]Numpy indexing reorders array

我刚刚偶然发现了一个我不太明白的numpy索引行为。 似乎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)。 如果我从第四个中选择一个元素,为什么前两个维度的形状会发生变化? 非常感谢提前!

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

这是预期的行为...... NumPy处理用切片索引的轴和用数组索引的轴不同。 默认行为是,在使用切片索引的轴的最终形状之前,生成的形状将具有用数组索引的轴的最终形状。 这意味着奇数输出是第一种情况,应该是(1, 3, 3, 3) 但有人认为它会使用户感到困惑,例如你的一些简单情况,所以当所有用数组索引的轴组合在一起时,得到的形状放在输出形状的位置,其中数组索引轴的簇位于原始数组。

你可以自己测试一下:

>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape
(3, 1, 3)

正如您所经历的那样,这种聪明可能比一致的行为更令人困惑。 NumPy开发人员的共识是,最好不要以不同方式处理聚簇数组索引轴,甚至有一个PR实现索引器属性 ,这将允许这种更精确的索引。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM