好的,所以我发现可以有形状为0的数组。
对于只有0作为唯一尺寸的情况,这对我来说很有意义。这是一个空数组。
np.zeros(0)
但是如果您有这样的情况:
np.zeros((0, 100))
让我感到困惑。为什么这样定义?
答案 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]]
没有什么特别不透明的。您的常识实际上在这里适用。如果数组为空,则添加到该数组中的其他任何维度都不重要。