NumPy数组维度
【介绍】
数组维数
现在我们已经创建了一维和二维数组,
让我们深入了解 NumPy 的主要优势之一:处理任何维度数据的能力。
由于以更高维度保存的数据可能更难处理,我们还将学习如何检查和更新数组形状。
让我们潜入!
3D 数组
就像我们可以通过向 NumPy 提供列表列表来创建 2D 数组一样,我们可以通过创建列表的列表的列表来创建 3D 数组。
或者,我们可以创建一个 2D 数组的数组。
为此,我们将 2D 数组列表传递给np.array()
。
我们可以将 3D 阵列可视化为一堆形状相同的 2D 数组堆叠在一起。
array_1_2D = np.array([[1,2], [5,7]])
array_2_2D = np.array([[8,9], [5,7]])
array_3_2D = np.array([[1,2], [5,7]])
array_3D = np.array([array_1_2D, array_2_2D, array_3_2D])
4D数组
四维数组可能更难可视化,因为我们没有第四维。将 4D 阵列视为充满 3D 阵列的 2D 阵列。
array_4D = np.array([array_A_3D, array_B_3D,array_C_3D,array_D_3D,array_E_3D,array_F_3D,array_G_3D, array_H_3D,array_I_3D])
向量数组
程序员和 NumPy 文档有时将数组称为向量(vectors)、矩阵(matrices)或张量(tensors)。
这些是数学术语而不是 NumPy 术语;它们都描述了数组的类型。
它们之间的区别在于数组具有的维数。
向量是指具有一维的数组。
NumPy 中的行和列(或水平和垂直)向量之间没有区别,因为没有为 1D 数组指定第二个轴。
要创建显式水平或垂直的数组,它必须是 2D 数组,以便 NumPy 了解它所在的轴,如右侧的数组。
由于这些数组是二维的而不是一维的,因此将它们称为向量是不正确的。
矩阵和张量数组
相反,在数学中,二维数组称为矩阵。
具有三个或更多维度的数组称为张量。
变形
我们已准备好学习我们的第一个数组属性和数组方法!
数组属性是数组实例的属性,例如数组的形状 .shape
。
像.flatten()
和.reshape()
这样的数组方法直接在数组对象本身上调用,而不是像我们对np.array()
等NumPy函数那样将数组作为参数传递。
查找数组的形状
.shape
描述数组的形状,并返回每个维度长度的元组。
array.shape
表示具有3行5列的二维数组。
array = np.zeros((3,5))
print(array)
array.shape
行和列
在 NumPy 中,引用行和列只能让我们走到这一步,因为许多数组都有二维以上的维度。
我们可以引用第一个维度,而不是引用行。
我们可以参考第二个维度,而不是引用列。
但是,在处理 2D 数组时,通常回退到行和列术语。
展平数组
操作一维数据通常比操作大型多维数组更容易。
np.flatten()
可以在这里提供帮助:它接受所有数组元素并将它们放在 1D 数组中的一个维度中。
array = np.array([[1,2], [5,7], [6,6]])
array.flatten()
重塑数组
.reshape()
方法允许我们重新定义数组的形状,而无需更改构成数组的元素。
在这个例子中,我们把一个3行2列的二维数组变成一个2行3列的二维数组。
传递给 .reshape()
的形状元组必须与数组中的元素数兼容。
这个数组不能重新塑造成 (3, 3) 的形状,因为3乘以3就是9,而数组只有6个元素。
array = np.array([[1,2], [5,7], [6.6]])
array.reshape((2,3))
让我们开始练习
好了,是时候自己玩弄数组维度了!
【一句话总结】
本节讲如何创建3D数组、4D数组,以及向量、矩阵、张量的概念,以及发现数组的形状和变形
概念
向量数组,就是一维数组。
矩阵数组,就是二维数组。
张量数据,就是三维及以上数组。
数组属性,就是数组实例的属性。
数组方法,直接在数组对象本身上调用的方法。
事实
2D数组,使用术语行列。
3D及以上数组,使用第一个维度,第二个维度。
程序
创建3D数组 np.array([array_1_2D, array_2_2D])
创建4D数组 np.array([array_1_3D, array_2_3D])
查询数组的形状 array.shape
展平为一维数组 array.flatten()
重塑数组形状 array.reshape((num1, num2))