python - 连接已分块的 3d numpy 数组

标签 python numpy multidimensional-array

我有大量 3d numpy 数组,将它们组装在一起时形成一个连续的 3d 数据集*。然而,阵列是通过将较大的空间分成 block 来创建的。我需要将 block 数组重新组装在一起。为了简化问题,我将其简化为以下示例,其中包含四个 block ,每个 block 都有 2x2x2 值。

所以我有:

yellow_chunk = np.array([[[1,2], [5,6]], [[17,18], [21,22]]])
green_chunk = np.array([[[3,4], [7,8]], [[19,20], [23,24]]])
blue_chunk = np.array([[[9,10], [13,14]], [[25,26], [29,30]]])
red_chunk = np.array([[[11,12], [15,16]], [[27,28], [31,32]]])

我想最终得到:

>>> output
array([[[ 1,  2,  3,  4],
        [ 5,  6,  7,  8],
        [ 9, 10, 11, 12],
        [13, 14, 15, 16]],

       [[17, 18, 19, 20],
        [21, 22, 23, 24],
        [25, 26, 27, 28],
        [29, 30, 31, 32]]])

这个小例子的说明:

3d illustration of the layout of blocks, organized by "section"

我尝试过的事情

连接

>>> np.concatenate([yellow_chunk,green_chunk,blue_chunk,red_chunk],-1)
array([[[ 1,  2,  3,  4,  9, 10, 11, 12],
        [ 5,  6,  7,  8, 13, 14, 15, 16]],

       [[17, 18, 19, 20, 25, 26, 27, 28],
        [21, 22, 23, 24, 29, 30, 31, 32]]])

这很接近,但形状错误:8x2x2,而不是我需要的 4x2x4。

hstack

>>> np.hstack([yellow_chunk,green_chunk,blue_chunk,red_chunk])
array([[[ 1,  2],
        [ 5,  6],
        [ 3,  4],
        [ 7,  8],
        [ 9, 10],
        [13, 14],
        [11, 12],
        [15, 16]],

       [[17, 18],
        [21, 22],
        [19, 20],
        [23, 24],
        [25, 26],
        [29, 30],
        [27, 28],
        [31, 32]]])

形状也错误。

vstack

>>> np.vstack([yellow_chunk,green_chunk,blue_chunk,red_chunk])
array([[[ 1,  2],
        [ 5,  6]],

       [[17, 18],
        [21, 22]],

       [[ 3,  4],
        [ 7,  8]],

       [[19, 20],
        [23, 24]],

       [[ 9, 10],
        [13, 14]],

       [[25, 26],
        [29, 30]],

       [[11, 12],
        [15, 16]],

       [[27, 28],
        [31, 32]]])

形状和顺序错误。

dstack

>>> np.dstack([yellow_chunk,green_chunk,blue_chunk,red_chunk])
array([[[ 1,  2,  3,  4,  9, 10, 11, 12],
        [ 5,  6,  7,  8, 13, 14, 15, 16]],

       [[17, 18, 19, 20, 25, 26, 27, 28],
        [21, 22, 23, 24, 29, 30, 31, 32]]])

形状和顺序错误。

* 实际上,我有 16x16 block ,每个 block 的形状为 16x128x16。因此,我将 256 个值的“行”拼接在一起,而不是上面小示例中的 4 值行。

最佳答案

np.block([[yellow_chunk, green_chunk], [blue_chunk, red_chunk]])

>>>
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]
  [13 14 15 16]]

 [[17 18 19 20]
  [21 22 23 24]
  [25 26 27 28]
  [29 30 31 32]]]

您在这里所做的是从嵌套的 block 列表中组装一个 nd 数组。

如果您想了解有关连接数组的更多信息,您可以阅读此 numpy.org doc 所有可用的相关方法和函数。

关于python - 连接已分块的 3d numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73286722/

相关文章:

c++ - 二维数组

c++ - 将二维字符串数组传递给 C++ 中的函数

python - 我在通过 SendGrid 发送电子邮件时在标题中添加了“回复”和“引用”,但它不起作用

Python:用于快速全屏 jpg/png 显示的 OSX 库

python - 在Python中删除二维数组中的最后一个值

c++ - 使用 Boost-Python 计算 python 中定义的函数的导数

python - 有没有办法使矩形形状函数为正值?

python - 如何与 Odoo 9 一起运行 Odoo 8?

python - 动态规范化 2D numpy 数组

javascript - 具有动态添加控件的 Angular FormArray