以零开头的numpy形状是什么意思

时间:2018-12-12 17:02:49

标签: python arrays numpy

好的,所以我发现可以有形状为0的数组。
对于只有0作为唯一尺寸的情况,这对我来说很有意义。这是一个空数组。

np.zeros(0)

但是如果您有这样的情况:

np.zeros((0, 100))

让我感到困惑。为什么这样定义?

2 个答案:

答案 0 :(得分:1)

据我所知,这只是表示空数组的一种多余方法。如果您有“空”行,对于python似乎并不重要。

假设我们有一个给定数组a:

import numpy as np

a = np.zeros((0,100))

如果我们打印出所有内容,那么我们得到的就是空数组本身:

print(a)

>>> []

此外,我们实际上可以看到,尽管保持了它的形状,

np.shape(a)

>>> (0, 100)

但是,如果您尝试按位置访问给定元素,例如:

print(a[0])

print(a[0][0])

您收到IndexError:

IndexError: index 0 is out of bounds for axis 0 with size 0

因此,我相信,尽管您为空数组指定了形状,但它们的数学含义是相同的。

答案 1 :(得分:0)

在这种情况下,这两个语句是等价的:

print(np.zeros(0))
>>>[]

print(np.zeros((0,100)))
>>>[]

这是因为空数组是空数组。你的直觉是正确的。如果您输入:

np.zeros(10)

np.zeros((1,10))

您还将获得相同的数组,即[0,0,0,0,0,0,0,0,0,0]。仅当您指的是实际更改数组形状的数字时,形状才重要。例如:

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

但是:

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

没有什么特别不透明的。您的常识实际上在这里适用。如果数组为空,则添加到该数组中的其他任何维度都不重要。