【问题标题】:(Numpy) How to stack 4 arrays into one?(Numpy) 如何将 4 个数组堆叠为一个?
【发布时间】:2022-10-15 16:15:48
【问题描述】:

我每个都有 1000 个 numpy 数组(32x32)的列表,所以

array.shape = (1000, 32, 32)。 例如,我如何最好地将整个列表堆叠成一个 64x64 数组,以便结果为 (250, 64, 64)? 因此,前 4 个 (32, 32) 数组像这样连接:

1   |   2
----------
3   |   4

这意味着我最终得到 250、64x 64 阵列。 任何人都可以帮忙吗?

【问题讨论】:

  • 重塑为(250,2,2,32,32),交换轴,使其成为(250,2,32,2,32),最后重塑。

标签: python arrays numpy


【解决方案1】:

您也可以在此处查看冒号符号。这应该具有与遍历数组相同的输出:

import numpy as np
large_array = np.zeros((1000, 32, 32))
output_array = np.zeros((250, 64, 64))

# Extract each block 1, 2, 3 and 4 and write to output array
# '::4' select only every fourth array
output_array[:, 0:32,  0:32] = large_array[0::4, ...]  # Blocks: '1'
output_array[:, 32:64, 0:32] = large_array[1::4, ...]  # Blocks: '2'
output_array[:, 0:32,  32:64] = large_array[2::4, ...] # Blocks: '3'
output_array[:, 32:64, 32:64] = large_array[3::4, ...] # Blocks: '4'

【讨论】:

  • IMO 的第二个和第三个赋值必须交换。 +1
【解决方案2】:

这是一种仍然使用循环但不会在迭代填充的最后一个数组之外创建任何新数组的方法。

#yourlist.shape == (1000,32,32)
new = np.empty((250, 64, 64))
for i in range(0, yourlist.shape[0], 4):
   a, b, c, d = yourlist[i:i+4] # views
   new[i // 4, 0:32, 0:32] = a
   new[i // 4, 0:32, 32:64] = b
   new[i // 4, 32:64, 0:32] = c
   new[i // 4, 32:64, 32:64] = d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多