具有多维形状的 np.zeros 结构

Posted

技术标签:

【中文标题】具有多维形状的 np.zeros 结构【英文标题】:structure of np.zeros with multi dimensional shape 【发布时间】:2019-09-15 07:27:35 【问题描述】:

我在github上的一个程序中看到了

img_out = np.zeros(((4,)+(512,1024,3)+(3,)))

我试图了解由此形成的 numpy 数组的结构。 documentation 没有给出这种复杂形状的任何细节。谁能解释一下我应该如何解释这个数组的结构。

【问题讨论】:

((4,)+(512,1024,3)+(3,)) 给你什么?然后阅读文档。 >>> np.zeros(((4,)+(512,1024,3)+(3,))).shape 这能回答你的问题吗? 512 是图像的宽度,1024 是高度,3 是图像中的通道,如rbg。其他必须是一些不同的参数。 @PiRocks,所以,它是一个 5D 数组。我看到它的形状是 (4, 512, 1024,3,3)。我假设它是一个 5D 数组。对吗 是的。是5维数组,形状也对。 【参考方案1】:

您可以尝试理解一个更简单的 5 维示例:

print(np.zeros( (1, 2, 1, 2, 2)))

输出:

[[[[[0. 0.]
    [0. 0.]]]


  [[[0. 0.]
    [0. 0.]]]]]

在此示例中,您可以看到您有 1 个第 5 维元素,其中包含 2 个第 4 维元素,每个元素包含 1 个第 3 维元素,其中包含 2 个第 2 维元素,每个元素包含 2一维元素:

[<== your array 
    5th.1[<=== your 5th dimention, only 1 element of 5th dimention

        5th.1.4th.1[<=== your 4th dimention, 1st element of 4th dimention

            5th.1.4th.1.3th.1[<=== your 3rd dimention, only 1 element of  3rd dimention

                5th.1.4th.1.3th.1.2ed.1[<=== your 2ed dimention, 1st element of 2ed dimention,
                                             inside of this element are those elements of 1st dimention,
                                             there are 2 elements of 1st dimention:
                                                0.0, 0.0],

                 5th.1.4th.1.3th.1.2ed.2[<=== your 2ed dimention, 2end element of 2ed dimention,
                                              inside of this element are those elements of 1st dimention,
                                              there are 2 elements of 1st dimention:
                                                 0.0, 0.0]]], 



        5th.1.4th.2[<=== your 4th dimention, 2end element of 4th dimention

            5th.1.4th.2.3th.1[<=== your 3rd dimention, only 1 element of 3rd dimention

                5th.1.4th.2.3th.1.2ed.1[<=== your 2ed dimention, 1st element of  2ed dimention,
                                             inside of this element are those elements of 1st dimention,
                                             there are 2 element of 1st dimention:
                                                0.0, 0.0],

                 5th.1.4th.2.3th.1.2ed.2[<=== your 2ed dimention, 2end element of 2ed dimention,
                                              inside of this element are those elements of 1st dimention,
                                              there are 2 elements of 1st dimention:
                                                0.0, 0.0]]]]

为简单起见:

[1 X [2 x [1 x [[0.0, 0.0], 
                [0.0., 0.0]]]]]

你必须记住(4,)+(512,1024,3)+(3,) = (4, 512, 1024, 3, 3),他们使用 3 个元组来证明:

    图像数量 (4), 高度 (512)、宽度 (1024) 和深度 (3), 通道数(3)

在您的 np.zeros(((4,)+(512,1024,3)+(3,))) 示例中类似,您可以简化为:

 [4 X [512 X [1024 X [[0.0, 0.0, 0.0],
                      [0.0, 0.0, 0.0],
                      [0.0, 0.0, 0.0]]]]]

【讨论】:

感谢您提供如此清晰的解释。但是,我有一个小疑问,图像的深度是否等于通道数?那么3,3作为最后两个维度有什么用呢。 碰巧这里的深度是3,可以是8例如***.com/questions/10108541/…【参考方案2】:

@Sree 提及。

这是一张 5D 图像。

import numpy as np
a = np.zeros(((4,)+(512,1024,3)+(3,)))
a.shape

(4, 512, 1024, 3, 3) #output

512是图片的宽度

1024 是高度

3是图片中的频道,如rbg

所以仔细看代码你就会知道第一个和最后一个元素代表什么。

【讨论】:

【参考方案3】:

上面的代码可以这样分解

shape = ((4,)+(512,1024,3)+(3,))
## above line is similar to joining list using +, and will result tuple (4,512,1024,3,3)


img_out = np.zeros(shape)
## so shape of img_out = (4,512,1024,3,3)

【讨论】:

以上是关于具有多维形状的 np.zeros 结构的主要内容,如果未能解决你的问题,请参考以下文章

无法分配具有形状和数据类型的数组

评估TensorFlow中多维输入之间的成对欧氏距离

第六篇:python中numpy.zeros(np.zeros)的使用方法

数据科学包——numpy

数据科学包——numpy

包含具有可变形状的多维 numpy 数组的 numpy 数组