繁体   English   中英

Numpy ndarray形状有3个参数

[英]Numpy ndarray shape with 3 parameters

当提供3个参数时,我对ndarray的形状感到困惑:

例如,有什么区别:

np.zeros((2, 1, 3))
array([[[ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.]]])

和:

np.zeros((1, 2, 3))
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

在我看来,它们都代表2 * 3矩阵。

不,形状不同,你必须注意方括号

>>> np.zeros((2, 1, 3))
array([[[ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.]]])

与:

>>> np.zeros((1, 2, 3))
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

正如你所看到的,在第一次调用中,我们有两次方括号用于第二个维度,而在后者中,我们只有一个这样的对。

形状也不同:

>>> np.zeros((2, 1, 3)).shape
(2, 1, 3)
>>> np.zeros((1, 2, 3)).shape
(1, 2, 3)

所以在前者中我们有一个包含两个子列表的列表。 这些子列表中的每一个都包含一个元素:三个元素的列表。 在后者中,我们有一个包含一个元素的列表:一个包含两个元素的子列表,这两个元素是包含三个元素的列表。

所以一个类似于vanilla的Python列表将是:

[ [ [0, 0, 0] ], [ [0, 0, 0] ] ]

与:

[ [ [0, 0, 0], [0, 0, 0] ] ]

dim = 1只是一个愚蠢的维度,你总是可以将2x3矩阵视为1x2x3的张量。

但是,它们在技术上并不是一回事。 因此,您可以看到2输出中的括号[]不完全相同,哑维度的[]位置不在同一位置。

要删除哑尺寸,请使用

arr = np.squeeze(arr)

根据numpy.zeros文档 ,第一个参数是表示数组形状的序列或int。

如果仔细观察,嵌套的方括号与您构建的形状不一致。

这个例子可能会更清楚:

np.zeros((2, 3, 4))

array([[[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM