对Numpy的ndim感到困惑

Col*_*ang 0 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
Run Code Online (Sandbox Code Playgroud)

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

4
3
Run Code Online (Sandbox Code Playgroud)

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

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

你能给我一些提示吗?谢谢

lvc*_*lvc 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
Run Code Online (Sandbox Code Playgroud)

给出的参数reshape数量和返回的元组中元素的数量a.shape是2.如果是这样的话:

>>> a = np.arange(30).reshape(3, 5, 2)
>>> a.ndim
3
Run Code Online (Sandbox Code Playgroud)

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