gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:31:02 25 4
gpt4 key购买 nike

我有大量 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com