如何将数组从虚拟堆栈重塑为常规堆栈?



我不小心用了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]]])

相关内容

  • 没有找到相关文章

最新更新