Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy索引重新排序数组_Python_Numpy_Slice - Fatal编程技术网

Python Numpy索引重新排序数组

Python Numpy索引重新排序数组,python,numpy,slice,Python,Numpy,Slice,我刚刚偶然发现了一个我不太理解的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 b

我刚刚偶然发现了一个我不太理解的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)。如果我从第四个元素中选择一个元素,为什么前二维的形状会改变? 提前多谢

编辑:
我在使用python 2.7.11的numpy 1.11.0上看到了这一点,这是预期的行为。。。NumPy对使用切片索引的轴和使用数组索引的轴的处理方式不同。默认行为是,结果形状的轴的结果形状将在使用切片索引的轴的结果形状之前使用数组索引。这意味着奇数是第一种情况,应该是
(1,3,3,3)
。但是有人认为这会让用户对一些简单的情况感到困惑,比如你的情况,所以当所有使用数组索引的轴组合在一起时,生成的形状将放置在输出形状的位置,其中数组索引轴的集群位于原始数组中

您可以自己测试它:

>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape
(3, 1, 3)
正如您所经历的,这种聪明可能比一致的行为更令人困惑。NumPy开发人员的共识是,最好不要以不同的方式处理集群阵列索引轴,甚至还有一种方法允许这种更合理的索引


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

虽然不太清楚,但这种行为仍然存在。