为什么 NumPy reshape() 会创建一个新数组,为什么不能保留顺序?
Why would NumPy reshape() create a new array and why might order not be preserved?
SO 上有几个关于检查 numpy.reshape
调用是否 return 复制了副本 [1, 2] 的问题。这些问题通常是由于文档的模糊警告而提出的:
This will be a new view object if possible; otherwise, it will be a copy.
我想知道的是在什么情况下NumPy return 会复制一份?在我测试过的每个 2D reshape
调用中,来自用户 jterrace 在 2 中的回答的方法表明内存基数是相同的(即不是副本)。是否只有更高维度的 reshape
才可能需要副本?
此外,文档警告的第二部分通知用户:
...there is no guarantee of the memory layout (C- or Fortran- contiguous) of the returned array.
换句话说,你可能要求行优先,但你可能会得到列优先输出。这不会破坏 order
参数的全部目的吗?这种情况会在什么时候出现?
What I'm wondering is in what circumstances will NumPy return a copy?
In [13]: x = numpy.array([[1, 2, 3],
....: [4, 5, 6]])
In [14]: x[:, :2].reshape([4]).base is x
Out[14]: False
如果步幅不适用于新形状,NumPy 必须复制。
In other words, you may ask for row-major, but you could get column-major output. Doesn't that defeat the whole purpose of the order
parameter?
没有。 numpy.reshape
无法提供请求特定内存布局的方法。 order
参数指定读取元素的索引顺序;它与内存布局无关。
SO 上有几个关于检查 numpy.reshape
调用是否 return 复制了副本 [1, 2] 的问题。这些问题通常是由于文档的模糊警告而提出的:
This will be a new view object if possible; otherwise, it will be a copy.
我想知道的是在什么情况下NumPy return 会复制一份?在我测试过的每个 2D reshape
调用中,来自用户 jterrace 在 2 中的回答的方法表明内存基数是相同的(即不是副本)。是否只有更高维度的 reshape
才可能需要副本?
此外,文档警告的第二部分通知用户:
...there is no guarantee of the memory layout (C- or Fortran- contiguous) of the returned array.
换句话说,你可能要求行优先,但你可能会得到列优先输出。这不会破坏 order
参数的全部目的吗?这种情况会在什么时候出现?
What I'm wondering is in what circumstances will NumPy return a copy?
In [13]: x = numpy.array([[1, 2, 3],
....: [4, 5, 6]])
In [14]: x[:, :2].reshape([4]).base is x
Out[14]: False
如果步幅不适用于新形状,NumPy 必须复制。
In other words, you may ask for row-major, but you could get column-major output. Doesn't that defeat the whole purpose of the
order
parameter?
没有。 numpy.reshape
无法提供请求特定内存布局的方法。 order
参数指定读取元素的索引顺序;它与内存布局无关。