在尝试在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])
答案 0 :(得分:6)
numpy.reshape
会复制数据,而设置shape
会引发错误而不是复制数据。
在不复制数据的情况下,无法始终更改阵列的形状。如果要在复制数据时引发错误,则应将新形状分配给数组的shape属性。