对Numpy的ndim感到困惑

时间:2013-06-08 09:07:10

标签: python numpy

import numpy as np

a = np.zeros((5,2,3,4), dtype=np.int16)
print a.ndim

b = np.zeros((2,3,4), dtype=np.int16)
print b.ndim

以上是我的代码。输出是:

4
3

我已经从[这里]检查了页面 (http://wiki.scipy.org/Tentative_NumPy_Tutorial#head-c5f4ceae0ab4b1313de41aba9104d0d7648e35cc

我期望a.dim = 2或3,但它是4.为什么?

你可以给我一些提示吗? 感谢

2 个答案:

答案 0 :(得分:7)

您赋予zeros和其他类似函数的元组给出了数组的“形状”(可用于任何数组a.shape)。维度数是该形状中的条目数。

如果您打印len(a.shape)len(b.shape),则可以获得结果。 ndim始终等于此(因为它是如何定义的)。

您提供的链接显示相同的行为,除了reshape方法采用任意数量的位置参数而不是元组。但是在教程的例子中:

>>> a = arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2

reshape给出的参数数量,以及a.shape给出的元组中的元素数量为2.如果是这样的话:

>>> a = np.arange(30).reshape(3, 5, 2)
>>> a.ndim
3

然后我们看到相同的行为:ndim是我们给numpy的形状条目数。

答案 1 :(得分:1)

zero给出了一个零数组,其中包含您指定的尺寸:

>>> b = np.zeros((2,3,4), dtype=np.int16)  
>>> b 
array([[[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]], dtype=int16)

对于b,您提供了三个维度,但对于a,您给出了四个维度。计算开头[

>>> a = np.zeros((5,2,3,4), dtype=np.int16)
>>> a 
array([[[[0, 0, 0, 0],
         [0, 0, 0, 0],
         [0, 0, 0, 0]],

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


...

shape回显您指定的尺寸:

>>> a.shape
(5, 2, 3, 4)

>>> b.shape
(2, 3, 4)