Python 为什么NumPy REFORMATE()会创建一个新数组,为什么不能保留顺序?

Python 为什么NumPy REFORMATE()会创建一个新数组,为什么不能保留顺序?,python,arrays,numpy,reshape,Python,Arrays,Numpy,Reshape,关于检查numpy.reformate调用是否返回副本,存在一些问题。这些问题通常是由于文件中的模糊警告而提出的,即: 如果可能,这将是一个新的视图对象;否则,它将是一个副本 我想知道的是,在什么情况下,NumPy会返还副本?在我测试过的每一次2Dreformate调用中,来自用户jterrace在中的回答的方法显示内存基数是相同的(即,不是副本)。是否只有在高维重塑时才需要复制 此外,文档警告的第二部分通知用户: …无法保证返回数组的内存布局(C或Fortran连续) 换句话说,您可以要求行主

关于检查
numpy.reformate
调用是否返回副本,存在一些问题。这些问题通常是由于文件中的模糊警告而提出的,即:

如果可能,这将是一个新的视图对象;否则,它将是一个副本

我想知道的是,在什么情况下,NumPy会返还副本?在我测试过的每一次2D
reformate
调用中,来自用户jterrace在中的回答的方法显示内存基数是相同的(即,不是副本)。是否只有在高维
重塑
时才需要复制

此外,文档警告的第二部分通知用户:

…无法保证返回数组的内存布局(C或Fortran连续)

换句话说,您可以要求行主输出,但可以获得列主输出。这不是违背了
order
参数的全部目的吗?这个案子什么时候发生

我想知道的是,在什么情况下,NumPy会返还副本

如果步幅对新形状不起作用,NumPy必须复制

换句话说,您可以要求行主输出,但可以获得列主输出。这不是违背了
order
参数的全部目的吗


否。
numpy.reformate
无法请求特定的内存布局。
order
参数指定读取元素的索引顺序;它与内存布局无关。

换句话说,为了获得所需的内存布局,需要显式地将其写入内存中的副本?更详细地说,最后一次整形生成
数组([1,2,4,5])
,是原始
[1,2,3,4,5,6]
的子集。好的。那么,我是否也要理解,只有当并非所有原始数据都通过重塑保留时,才会出现副本?在这个步幅示例中,对于相同的
x
x.T.重塑(2,3)
是一个副本。所有的数据都在那里,但顺序不同。@marcman:不,这与此无关。当结果数组的元素在内存中沿视图的每个轴的步幅不一致时,就会产生副本。
In [13]: x = numpy.array([[1, 2, 3],
   ....:                  [4, 5, 6]])

In [14]: x[:, :2].reshape([4]).base is x
Out[14]: False