Numpy 中 dim、shape、rank、dimension 和 axis 的区别解释
在本文中,我们将介绍 NumPy 中 dim、shape、rank、dimension 和 axis 的概念及其区别。这些是 NumPy 中常见的概念和属性参数,了解它们有助于更好地理解 NumPy 数组以及在数据分析和机器学习中的应用。
阅读更多:Numpy 教程
数组的维度
当我们谈到 NumPy 数组时,我们通常将它们称为多维数组或ndarrays。 数组的维度是指数组中包含的所有元素的增长方向。 在 NumPy 中常见的维度数是 1D,2D,3D 和更高维。
例如,下面是一个2D NumPy 数组,其中包含了5个行和4个列:
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5],
[9, 10, 11, 12]])
这个数组是二维的,它有两个维度:行和列。
而下面是一个3D NumPy 数组,它有长、宽、高三个维度:
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]])
在 NumPy 中,我们可以使用 . shape
和 . ndim
两个属性来获取数组的形状和维度信息,如下所示:
import numpy as np
arr2d = np.array([[1, 2, 3, 4], [4, 3, 2, 1], [5, 6, 7, 8], [8, 7, 6, 5], [9, 10, 11, 12]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7,8]], [[9, 10],[11, 12]]])
print("Shape of arr2d: ", arr2d.shape) # Shape of arr2d: (5, 4)
print("Dimension of arr2d: ", arr2d.ndim) # Dimension of arr2d: 2
print("Shape of arr3d: ", arr3d.shape) # Shape of arr3d: (3, 2, 2)
print("Dimension of arr3d: ", arr3d.ndim) # Dimension of arr3d: 3
dim 和 dimension
在 NumPy 中,dnim 和 dimension 这两个概念是等价的。它们指的是 NumPy 数组的维度,特别是我们在讨论向量、矩阵和张量时。 如果 NumPy 数组包含的是标量,那么它的 dnim 或 dimension 就是 0。
以下代码展示了 dnim 或 dimension 获取数组维度时的用法:
arr = np.array([1, 2, 3, 4, 5])
print("Dimension of arr: ", np.ndim(arr)) # Dimension of arr: 1
arr = np.array([[1, 2], [3, 4]])
print("Dimension of arr: ", np.ndim(arr)) # Dimension of arr: 2
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7,8]], [[9, 10],[11, 12]]])
print("Dimension of arr: ", np.ndim(arr)) # Dimension of arr: 3
rank
NumPy 中的 rank 是指数组维度的数量。例如,一个标量的 rank 为 0,一个向量的 rank 为 1,一个矩阵的 rank 为 2,一个张量的 rank 可以大于 2。
以下是 rank 的示例:
rank0 = np.array(5)
print("Rank of rank0: ", np.ndim(rank0)) # Rank of rank0: 0
rank1 = np.array([1, 2, 3])
print("Rank of rank1: ", np.ndim(rank1)) # Rank of rank1: 1
rank2 = np.array([[1, 2, 3], [4, 5, 6]])
print("Rank of rank2: ", np.ndim(rank2)) # Rank of rank2: 2
rank3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print("Rank of rank3: ", np.ndim(rank3)) # Rank of rank3: 3
shape
shape 是 NumPy 中的另一个概念,它描述的是 NumPy 数组中每个维度的大小。 例如,一个形状为 (2, 5) 的数组表示有两个行和五个列。
以下是一些 shape 的示例:
arr = np.array([1, 2, 3, 4, 5])
print("Shape of arr: ", arr.shape) # Shape of arr: (5,)
arr = np.array([[1, 2], [3, 4]])
print("Shape of arr: ", arr.shape) # Shape of arr: (2, 2)
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7,8]], [[9, 10],[11, 12]]])
print("Shape of arr: ", arr.shape) # Shape of arr: (3, 2, 2)
从上面的示例中,我们可以看出 shape 与维度和大小有关。它也与 rank 有关,因为 rank 就是 shape 的长度。
axis
axis 是 NumPy 数组中非常常见的概念之一。 它描述了您想要压缩的轴。 轴是沿 NumPy 数组的摆放方向排列的。例如,一个 5 \times 4 \times 3 的 NumPy 数组有三个轴:0, 1 和 2。
以下示例演示了如何在 NumPy 中使用轴:
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
print("Arr: ", arr)
# 沿着行(第1轴)加总数组。
print("Sum along rows: ", np.sum(arr, axis=0))
# 沿着列(第0轴)加总数组。
print("Sum along columns: ", np.sum(arr, axis=1))
# 沿着第2轴,即深度方向压缩数组。
# 数组中的每个值都是一个一维数组。
print("Sum along depth: ", np.sum(arr, axis=2))
这就是 NumPy 中的 dim、shape、rank、dimension 和 axis 的所有概念及区别。通过了解这些概念,您可以更好地理解和操作 NumPy 数组。
总结
- dim 和 dimension 指的是数组的维度,rank 指的是数组维度的数量,shape 描述每个维度的大小。
- axis 描述要压缩的轴或沿哪个方向执行操作。