当我尝试在NumPy数组上使用
我意识到我可以通过简单地更改
我想知道何时使用其中一个,何时使用另一个?
感谢任何帮助。
如果您需要其他信息,请告诉我。
编辑:
我添加了我的代码以及创建要重塑的矩阵的方法(以防这很重要)。
根据您的内存更改N值。
.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])
编辑2: 这是一个更好的表述。显然,转置似乎很重要,因为它将数组从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])
numpy.random
生成虚假数据或其他任何东西,只需使其具有实际大小)。 - John Zwinckc
占用了 762 MB 的内存,但之后的重塑操作不会增加内存使用量。 - John Zwinck