首先,在Numpy中,维数(dimensions)通过轴(axes)来扩展,轴的个数被称作rank。这里的rank不是线性代数中的rank(秩),它指代的依旧是维数(number of dimensions):
The number of axes (dimensions) of the array. In the Python world, the number of dimensions is referred to as rank.
在数学或者物理的概念中,dimensions被认为是在空间中表示一个点所需要的最少坐标个数,但是在Numpy中,dimensions指代的是axes。也就是说,axes、dimensions、rank这几个概念是相通的。
下面举例子,比如我们在3-D空间中定义三个点,用array的形式表达:
>>>import numpy as np
>>>a = np.array([[1,2,3],[2,3,4],[3,4,9]])
>>>a
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 9]])
按照以往的理解,我们可能会认为这个array是三维的,但实际上在Numpy中,这个array的dimensions,也就是rank的值是等于2的:
>>>np.ndim(a)
2
因为它只有两个axis,只不过这两个axis的长度(length)均为3:
>>>np.shape(a)
(3, 3)
同时,这个矩阵在线性代数中的rank(秩)依旧是3(这里要加以区分):
>>>np.linalg.matrix_rank(a)
3
也就是说,在Numpy中,任何vector都被看作具有不同长度(length)的一维array。
下面继续聊聊axis/axes,我们依旧先定义一个3-D的array:
>>>b = np.array([[[1,2,3,4],[1,3,4,5]],[[2,4,7,5],[8,4,3,5]],[[2,5,7,3],[1,5,3,7]]])
>>>b
array([[[1, 2, 3, 4],
[1, 3, 4, 5]],
[[2, 4, 7, 5],
[8, 4, 3, 5]],
[[2, 5, 7, 3],
[1, 5, 3, 7]]])
>>>b.shape
(3, 2, 4)
我们定义了一个shape为(3, 2, 4)的array,这个shape(用tuple表示)可以理解为在每个轴(axis)上的size,也即占有的长度(length),三个值的含义:axis = 0对应轴上的元素length =