我不小心用了np.vstack(x)
而不是np.stack(x, axis=0)
。有没有办法将生成的数组从vstack
重塑为常规stack(x, axis=0)
?
我在我的计算机上保存了生成的 .npy,所以如果可能的话,您只是为我节省了 6 个小时的重新运行代码。
背景:
我有 1501 张大小为 (250,250) 的图像被错误地堆叠。这些图像 + 特征的当前数组形状为 (375250, 2048)。我希望这个数组是(1501,任何数字)。这就是为什么 375250/250 = 1501。
每个阵列在堆叠之前都有形状 (2048, )
我的电脑崩溃了,因为没有足够的 RAM 来创建这么大的数组,但理论上,以下应该可以工作:
elements = arr.shape[0] * arr.shape[1]
new_col_num = elements//1501
arr2 = arr.reshape(1501, new_col_num)
arr
是大小为(375250, 2048)
的数组,arr2
是形状为(1501, some number)
的数组。
重塑应该就足够了,因为你的预期轴是第一个
为了说明 - 使用假装成 2 个 2d 数组列表的 3d 数组:
In [77]: arr = np.arange(24).reshape(2,3,4)
In [78]: np.stack(arr, 0)
Out[78]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [79]: np.vstack(arr)
Out[79]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
In [80]: np.vstack(arr).reshape(2,3,4)
Out[80]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])