具有多维形状的 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 结构的主要内容,如果未能解决你的问题,请参考以下文章