我正在实现一个将文件中的数据读取到多维 numpy 数组中的函数。数据在维度长度的意义上是规则结构的,但是,某些维度可能会丢失,在这种情况下,我会让该维度的长度为 0。所以我偶然发现了这种行为:
In [1]: np.random.random((3,3))
Out[1]:
array([[ 0.59756568, 0.47198749, 0.23442854],
[ 0.29374254, 0.58289927, 0.40497268],
[ 0.00481053, 0.63471263, 0.90053086]])
In [2]: np.random.random((0,3,3))
Out[2]: array([], shape=(0, 3, 3), dtype=float64)
好的,所以我得到一个空数组。如果我将其视为第 2 维和第 3 维是第 1 维的子集,这是 nil,因此整个数组是 nil,这是有道理的。但是,我希望 np.random.random((3,3,0)) 等同于 np.random.random((3,3))。然而,
In [3]: np.random.random((3,3,0))
Out[3]: array([], shape=(3, 3, 0), dtype=float64)
又是一个空数组。
这是预期的行为吗?我了解 np.array((3,3)) 和 np.array((3,3,1)) 或 np.array( (1,3,3)),但我正在寻找一个解释,为什么长度为 0 的维度会退化整个数组,而不仅仅是那个维度。是我一个人,还是这是 Python/numpy WTF 之一?
请您参考如下方法:
正如我在评论中所述,您将得到一个空数组,因为如果任何维度为零,则数组的大小始终为零。我能问一下你想做什么吗?如果你想要一个空的 3rd 维度,你可以尝试类似下面的东西:
>>> x = numpy.random.random((3,3))
>>> y = x[..., numpy.newaxis]
>>> y
array([[[ 0.92418241],
[ 0.76716579],
[ 0.82485034]],
[[ 0.30571695],
[ 0.71012271],
[ 0.54609355]],
[[ 0.98192734],
[ 0.25505518],
[ 0.75473749]]])
>>> y.shape
(3, 3, 1)
>>> x.shape
(3, 3)
