NumPy 不仅限于一维数组,它还可以拥有多维数组,也称为N维数组或ndarray。
N维数组是指数组组织的维度数。
数组可以具有任意数量的维度,每个维度可以具有任意数量的元素。
例如,二维数组表示一个带行和列的表,而三维数组表示一个具有宽度、高度和深度的立方体。
NumPy 中有多种创建N维数组的技术,我们将在下面逐一探讨。
从列表的列表创建N维数组
要从Python列表创建N维NumPy数组,我们可以使用np.array()
函数并将列表作为参数传递。
创建二维NumPy数组
让我们使用列表创建一个具有2行和4列的二维NumPy数组。
import numpy as np
# create a 2D array with 2 rows and 4 columns
array1 = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
print(array1)
输出
[[1 2 3 4] [5 6 7 8]]
在上面的示例中,我们首先创建了一个二维列表(列表的列表)[[1, 2, 3, 4], [5, 6, 7, 8]]
,它包含2行和4列。然后,我们将该列表传递给np.array()
函数来创建二维数组。
创建三维NumPy数组
假设我们要创建一个三维NumPy数组,包含两个“切片”,每个切片有3行和4列。
以下是我们创建所需三维数组的方法:
import numpy as np
# create a 3D array with 2 "slices", each of 3 rows and 4 columns
array1 = np.array([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]],
[[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]]])
print(array1)
输出
[[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 22 23 24]]]
在这里,我们创建了一个三维列表(列表的列表的列表)并将其传递给np.array()
函数。这将创建一个名为array1
的三维数组。
在三维列表中:
- 最外层的列表包含两个元素,它们是代表数组两个“切片”的列表。每个切片都是一个二维数组,具有3行和4列。
- 最内层的列表代表二维数组的单个行。
注意:在N维数组的上下文中,切片就像是我们可以通过选择特定范围的行、列来提取的数组的子集。
从头开始创建N维数组
我们已经了解了如何从Python列表创建N维NumPy数组。现在我们将了解如何从头开始创建它们。
要从头开始创建多维数组,我们使用诸如以下函数:
np.zeros()
np.arange()
np.random.rand()
使用np.zeros()创建N维数组
np.zeros()
函数允许我们创建由所有零填充的N维数组。例如:
import numpy as np
# create 2D array with 2 rows and 3 columns filled with zeros
array1 = np.zeros((2, 3))
print("2-D Array: ")
print(array1)
# create 3D array with dimensions 2x3x4 filled with zeros
array2 = np.zeros((2, 3, 4))
print("\n3-D Array: ")
print(array2)
输出
2-D Array: [[0. 0. 0.] [0. 0. 0.]] 3-D Array: [[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]]
在上面的示例中,我们分别使用了np.zeros()
函数创建了一个二维数组和一个三维数组,它们都用零填充。
np.zeros((2, 3))
- 返回一个用零填充的二维数组,具有2行和3列np.zeros((2, 3, 4))
- 返回一个用零填充的三维数组,包含2个切片,每个切片具有3行和4列。
注意:类似地,我们可以使用np.ones()
创建填充值为1的数组。
使用指定值创建N维数组
在NumPy中,我们可以使用np.full()
函数来创建具有指定值多维数组。
例如,要创建一个值为5的二维数组,我们可以这样做:
import numpy as np
# Create a 2-D array with elements initialized to 5
numpy_array = np.full((2, 2), 5)
print("Array:", numpy_array)
输出
[[5 5] [5 5]]
在这里,我们使用了np.full()
函数创建了一个二维数组,其中所有元素都初始化为5。
使用np.random.rand()创建数组
np.random.rand()
函数用于创建随机数数组。
让我们看一个创建包含5个随机数的数组的示例:
import numpy as np
# create a 2D array of 2 rows and 2 columns of random numbers
array1 = np.random.rand(2, 2)
print("2-D Array: ")
print(array1)
# create a 3D array of shape (2, 2, 2) of random numbers
array2 = np.random.rand(2, 2, 2)
print("\n3-D Array: ")
print(array2)
输出
2-D Array: [[0.13198621 0.54730421] [0.36570987 0.16233836]] 3-D Array: [[[0.15666007 0.4580507 ] [0.84769856 0.76699589]] [[0.45395202 0.39944328] [0.62999479 0.39629496]]]
这里,
np.random.rand(2, 2)
- 创建一个具有2行和2列的随机数二维数组。np.random.rand(2, 2, 2)
- 创建一个三维数组,包含2个切片,每个切片具有2行和2列的随机数。
创建空N维NumPy数组
要创建空N维NumPy数组,我们使用np.empty()
函数。例如:
import numpy as np
# create an empty 2D array with 2 rows and 2 columns
array1 = np.empty((2, 2))
print("2-D Array: ")
print(array1)
# create an empty 3D array of shape (2, 2, 2)
array2 = np.empty((2, 2, 2))
print("\n3-D Array: ")
print(array2)
输出
2-D Array: [[8.86495615e-317 0.00000000e+000] [2.21149159e-316 1.76125651e-312]] 3-D Array: [[[1.0749539e-316 0.0000000e+000] [0.0000000e+000 0.0000000e+000]] [[0.0000000e+000 0.0000000e+000] [0.0000000e+000 0.0000000e+000]]]
在上面的示例中,我们分别使用了np.empty()函数创建了一个空的二维数组和一个三维数组。
如果我们查看代码的输出,我们可以看到空数组实际上并不是空的,它里面包含一些值。
这是因为虽然我们创建了一个空数组,但NumPy会尝试向其中添加一些值。数组中存储的值是任意的,没有重要意义。