eva*_*n54 3 python arrays numpy
我试图.reshape在一个numpy数组上使用时遇到了内存问题,并想知道我是否能够以某种方式重塑阵列,这将是非常好的.
我意识到我可以通过简单地改变.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])
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
numpy.reshape如果数据无法正确显示,则会复制数据,而设置shape将导致错误而不是复制数据.
如果不复制数据,并不总是可以更改数组的形状.如果要在复制数据时引发错误,则应将新形状分配给数组的shape属性.