我们在描述一个多维数组的时候,经常会用到两个参数:维度(dimension)和形状(shape),以二维数组为例,我们可以用矩阵来形象地联想这两个参数,对于矩阵,显然我们最常见的矩阵是二维的,所以他的dim参数就是2,而对于形状,可以想象成这个矩阵(矩形)的的高和宽,比如一个4行3列的矩阵,他的高就是4,宽就是3。所以他的shape参数就是(4,3),这是一对数字,因此在python中使用元祖(tuple)数据结构来表示这个属性。我们可使用以下代码来进行演示:
import numpy as np
data = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
[0,0,0]
])
print(data)
print(data.ndim)
print(data.shape)
在运行之后,我们可以得到以下结果:
[[1 2 3]
[4 5 6]
[7 8 9]
[0 0 0]]
2
(4, 3)
[Finished in 1.2s]
对于大于二维的多维数组,我们可以认为就是数组的数组的数组…,我们可以用嵌套(类似于套娃结构)来描述,是几维的就有多少层嵌套。但是一般而言,我们用二维的数组就够用了,三维数组被称为张量(Tensor),在机器学习中有非常好的应用。
对于三维数组,我们可以使用以下代码进行演示:
import numpy as np
data_1dim = np.array([1,2,3,4])
data_2dim = np.array([data_1dim,data_1dim,data_1dim])
data_3dim = np.array([data_2dim,data_2dim])
print(data_3dim)
print(data_3dim.ndim)
print(data_3dim.shape)
我们打印出三维数组的形态如下:
[[[1 2 3 4]
[1 2 3 4]
[1 2 3 4]]
[[1 2 3 4]
[1 2 3 4]
[1 2 3 4]]]
3
(2, 3, 4)
[Finished in 1.6s]
可以看出,他是数组的数组的数组,我们在分析多维数组的时候,要理清楚结构,这个要根据配对的方括号来进行判断,找到级别的,比如这里第一队括号相对于是爷爷级别的,其他的和爷爷平级的就是第一维的元素,然后括号里面的又有括号,那就是爸爸级别的,括号里面的括号里面的括号,就是儿子级别的,数组的shape就相当于一共有几个爷爷,一个爷爷生了几个爸爸,一个爸爸生了几个儿子,这样就可以形象地理解多维数组的结构了,不过我们在使用的时候,用到二维数组就够了,三维以上的理解起来和维护起来太麻烦了,不利于软件工程的开发。