我有大量的3D NumPy数组,当它们组合在一起时,就形成了一个连续的3D数据集*.然而,这些数组是通过将较大的空间分成块来创建的.我需要把区块数组重新组装在一起.为了简化问题,我将其简化为以下示例,其中包含四个块,每个块都有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

我试过的东西

串接

>>> np.串接([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]]])

也是错误的形状.

虚拟堆栈

>>> np.虚拟堆栈([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]]])

形状和顺序错误.

数据堆栈

>>> np.数据堆栈([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块,每个块的形状都是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]]]

您在这里所做的是从嵌套的块列表组装一个NDarray.

如果您想了解更多关于joining arrays的信息,您可以阅读这篇100中所有可用的相关方法和函数.

Python相关问答推荐

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

ConversationalRetrivalChain引发键错误

具有相同图例 colored颜色 和标签的堆叠子图

如何将数据帧中的timedelta转换为datetime

使用__json__的 pyramid 在客户端返回意外格式

使用类型提示进行类型转换

我什么时候应该使用帆布和标签?

pytest、xdist和共享生成的文件依赖项

如何将验证器应用于PYDANC2中的EACHY_ITEM?

如何计算Pandas 中具有特定条件的行之间的天差

Python:使用asyncio.StreamReader.readline()读取长行

如何从具有完整层次数据的Pandas框架生成图形?

以元组为索引的Numpy多维索引

简化通用属性的创建

设置邮箱附件的文件类型

为什么我在Django中收到错误&无法解包不可迭代的bool对象?

Python渐进式打字

拆分单词的正则表达式:前三个大写字母,然后按大写字母拆分,然后按小写字母拆分

如何reshape 极地数据帧?

安装Spacy 2.3.5时出现错误消息-需要Microsoft Visual C++14.0或更高版本,即使已安装生成工具也是如此