何时使用.shape以及何时使用.reshape?

时间:2014-11-11 02:12:08

标签: python arrays numpy

在尝试在numpy数组上使用.reshape时遇到了内存问题,并想知道我是否可以以某种方式重塑数组,这将是非常好的。

我意识到只需更改.shape值即可重塑阵列。 不幸的是,当我尝试使用.shape时,我又遇到了一个内存错误,让我觉得它没有重新定位。

我想知道何时使用另一个?

感谢任何帮助。

如果您需要其他信息,请告诉我们。

编辑:

我添加了我的代码,以及在重要的情况下如何创建我想要重塑的矩阵。

根据你的记忆改变N值。

import numpy as np
N = 100
a = np.random.rand(N, N)
b = np.random.rand(N, N)
c = a[:, np.newaxis, :, np.newaxis] * b[np.newaxis, :, np.newaxis, :]
c = c.reshape([N*N, N*N])
c.shape = ([N, N, N, N])

EDIT2: 这是一个更好的代表。显然,转置似乎很重要,因为它将数组从C连续更改为F连续,并且在上面的情况下得到的乘法是连续的,而在下面的那个不是。

import numpy as np
N = 100
a = np.random.rand(N, N).T
b = np.random.rand(N, N).T
c = a[:, np.newaxis, :, np.newaxis] * b[np.newaxis, :, np.newaxis, :]
c = c.reshape([N*N, N*N])
c.shape = ([N, N, N, N])

1 个答案:

答案 0 :(得分:6)

如果数据无法正确显示,则

numpy.reshape会复制数据,而设置shape会引发错误而不是复制数据。

  

在不复制数据的情况下,无法始终更改阵列的形状。如果要在复制数据时引发错误,则应将新形状分配给数组的shape属性。