NumPy维度

7

我是一个Numpy的新手,正在尝试理解“维度”是什么基本问题,

我尝试了下面的命令,并试图理解为什么最后两个数组的 ndim 相同?

>>> a= array([1,2,3])
>>> a.ndim
1
>>> a= array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.ndim
2
>>> a=arange(15).reshape(3,5)
>>> a.ndim
2

>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

My understanding..

Case 1:
    array([[1, 2, 3],
           [4, 5, 6]])

2 elements are present in main lists, so ndim is-2

Case 2:
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])

主列表中有3个元素,因此ndim为-3。


如果您提到了您对它们的期望,那么解释起来会更容易。 - shx2
ndim 表示“维度数”。一个二维数组的 ndim 为 2,一个三维数组的 ndim 为 3,以此类推。 - endolith
2个回答

13

数组的形状是其维度的元组。一维数组的形状为(n,)。二维数组的形状为(n,m)(就像您的第2个和第3个案例),三维数组的形状为(n,m,k),以此类推。

因此,虽然您的第二个和第三个示例的形状不同,但两种情况下的维数都是两个:

>>> a= np.array([[1,2,3],[4,5,6]])
>>> a.shape
(2, 3)

>>> b=np.arange(15).reshape(3,5)
>>> b.shape
(3, 5)

如果您想给示例添加另一个维度,您需要像这样做:

a= np.array([[[1,2,3]],[[4,5,6]]])
或者
np.arange(15).reshape(3,5,1)

您可以通过以下方式继续添加维度:

一维:

>>> a = np.zeros((2))
array([ 0.,  0.])
>>> a.shape
(2,)
>>> a.ndim
1

二维:

>>> b = np.zeros((2,2))
array([[ 0.,  0.],
       [ 0.,  0.]])
>>> b.shape
(2,2)
>>> b.ndim
2

三个维度:

>>> c = np.zeros((2,2,2))
array([[[ 0.,  0.],
        [ 0.,  0.]],

       [[ 0.,  0.],
        [ 0.,  0.]]])
>>> c.shape
(2,2,2)
>>> c.ndim
3

四个维度:

>>> d = np.zeros((2,2,2,2))
array([[[[ 0.,  0.],
         [ 0.,  0.]],

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


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

        [[ 0.,  0.],
         [ 0.,  0.]]]])
>>> d.shape
(2,2,2,2)
>>> d.ndim
4

0

虽然@atomh33ls有一个很棒的书面答案,但我生成了这个可视化来帮助传达numpy.ndarray.shapenumpy.ndarray.ndim之间的差异。

在这个可视化中,每个新滑块移动到1以上时,ndim就会增加。当m设置为1时,首先看到这一点,定义了一个具有shape (1,)的一维ndarray

请注意,我使用mnk来表示每个附加维度的长度。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接