秩>1且维数之一==0的Numpy数组

2024-04-20 13:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个将数据从文件读入多维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)

好的,我得到一个空数组。如果我把它看作是第二和第三维是第一维的子集,也就是零,那么整个数组就是零。但是,我希望np.random.random((3,3,0))等同于np.random.random((3,3))。但是

^{pr2}$

又是一个空数组。在

这是预期的行为吗?我理解np.array((3,3))np.array((3,3,1))np.array((1,3,3))之间的区别,但我想找一个解释,为什么长度为0的维会退化整个数组,而不仅仅是那个维。只是我,还是Python/numpy的wtf之一?在


Tags: 数据函数innumpynp情况random数组
1条回答
网友
1楼 · 发布于 2024-04-20 13:03:31

正如我在评论中所说的,你得到的是一个空数组,因为如果任何维度都为零,那么数组的大小总是为零。我想问你能做什么?如果你想要一个空的三维空间,你可以尝试如下方法:

>>> 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)

相关问题 更多 >