NumPy - 数组创建例程
创建 NumPy 数组
我们可以使用 Python NumPy 库提供的各种函数创建 NumPy 数组。此包提供了一个多维数组对象以及各种其他必要的对象和例程,以实现高效的功能。以下是创建 NumPy 数组所需的函数 -
- 使用 numpy.array() 函数
- 使用 numpy.zeros() 函数
- 使用 numpy.ones() 函数
- 使用 numpy.arange() 函数
- 使用 numpy.linspace() 函数
- 使用 numpy.random.rand() 函数
- 使用 numpy.empty() 函数
- 使用 numpy.full() 函数
与 Python 列表不同,NumPy 数组支持元素级操作,并且更节省内存,非常适合进行数学计算。
使用 numpy.array() 函数
我们可以使用使用 numpy.array() 函数,通过将 Python 列表或元组作为参数传递给该函数来创建数组。
此函数将输入数据(如列表、元组等)转换为 ndarray(NumPy 数组)。语法如下:-
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0, like=None)
示例:创建一维 NumPy 数组
在以下示例中,我们使用 numpy.array() 函数从整数列表创建一维 NumPy 数组:-
import numpy as np # 从列表创建一维数组 my_list = [1, 2, 3, 4, 5] my_array = np.array(my_list) print("一维数组:", my_array)
以下是得到的输出 -
一维数组:[1 2 3 4 5]
示例:创建二维 NumPy 数组
在这里,我们使用 numpy.array() 函数从列表列表创建一个二维 NumPy 数组 -
import numpy as np # 从列表列表创建二维数组 arr = np.array([[1, 2, 3], [4, 5, 6]]) print("二维数组: ", arr)
这将产生以下结果 -
二维数组: [[1 2 3] [4 5 6]]
使用 numpy.zeros() 函数
我们还可以使用 numpy.zeros() 函数创建数组,只需指定所需的数组形状为元组或整数即可。
此函数创建一个填充零的 NumPy 数组。它接受数组的形状作为参数,并可选地接受数据类型 (dtype)。默认情况下,数据类型为 float64。语法如下:-
numpy.zeros(shape, dtype=float, order='C')
示例
在本例中,我们创建一个包含 5 个元素的 NumPy 数组,所有元素均使用 numpy.zeros() 函数初始化为零。-
import numpy as np # 创建一个零数组 arr = np.zeros(5) print(arr)
以上代码的输出如下:-
[0. 0. 0. 0. 0.]
使用 numpy.ones() 函数
另一方面,numpy.ones() 函数创建一个所有元素都设置为 1 的数组。它接受三个主要参数:shape、dtype 和 order。
- shape 参数可以是整数或整数元组,用于定义数组的维度。
- dtype 参数指定数组元素所需的数据类型,如果未提供,则默认为"float64"。
- order 参数确定数组的内存布局,可以是行优先(C 语言风格)或列优先(Fortran 语言风格),默认为"C"。
语法如下:
numpy.ones(shape, dtype=None, order='C')
示例:创建一维 1 数组
在下面的示例中,我们将创建一个包含 3 个元素的一维 NumPy 数组,所有元素均使用 numpy.ones() 函数初始化为 1 -
import numpy as np # 创建一个 1 数组 arr = np.ones(3) print(arr)
执行上述代码后,我们得到以下输出 -
[1. 1. 1.]
示例:创建全 1 的二维数组
在这里,我们使用 np.ones() 函数创建一个 2 行 3 列的二维 NumPy 数组,所有元素均为 1 -
import numpy as np # 创建全 1 的二维数组 array_2d = np.ones((4, 3)) print(array_2d)
结果如下 -
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]
示例:创建一个 Fortran 排序的 1 数组
现在,我们使用 np.ones() 函数,以 Fortran 风格(列优先)排序,创建一个 2 行 3 列的二维 NumPy 数组,所有元素均为 1 -
import numpy as np # 创建 Fortran 排序的 1 数组 array_F = np.ones((4, 3), order='F') print(array_F)
我们得到如下所示的输出 -
[[1. 1. 1.][1. 1. 1.][1. 1. 1.][1. 1. 1.]]
使用 numpy.arange() 函数
numpy.arange() 函数通过根据指定的起始值、终止值和步长生成数字序列来创建数组。它类似于 Python 的内置 range() 函数。
此函数创建一个在给定间隔内等距分布的数组。它允许指定起始值、终止值和步长,并返回一个 NumPy 数组。
start − 序列的起始值。如果未指定,则默认为 0。
stop − 序列的结束值。此值不包含在序列中。
step − 序列中每对连续值之间的步长或间隔。如果未指定,则默认为 1。
以下是语法 -
numpy.arange([start,] stop[, step,] dtype=None, *, like=None)
示例
在下面的示例中,我们首先创建一个从 0 到 9 的 NumPy 数组"array1"。然后,我们使用 np.arange() 函数创建另一个数组"array2",其值从 1 到(但不包括)10,步长为 2 -
import numpy as np # 仅提供停止值 array1 = np.arange(10) print("array1:", array1) # 提供起始值、终止值和步长值 array2 = np.arange(1, 10, 2) print("array2:",array2)
以下是得到的输出 −
array1: [0 1 2 3 4 5 6 7 8 9] array2: [1 3 5 7 9]
使用 numpy.linspace() 函数
我们甚至可以使用 numpy.linspace() 函数通过指定起始值、终止值和所需的元素数量来创建数组。
此函数创建的数组由指定间隔内均匀分布的值组成。该函数接受起始值、终止值和元素数量的参数,并生成在起始值和终止值之间(含起始值和终止值)均匀分布的值。以下是语法 -
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
当您需要在两个端点之间设置一定数量的点来进行绘图或数值计算时,numpy.linspace() 函数特别有用。
示例
在下面的示例中,我们使用 numpy.linspace() 函数创建三个具有指定范围和配置的数组(array1、array2 和 array3)。
"array1"由 10 个等距值组成,范围从 0 到 5(含 0 和 5)。 "array2"由 5 个值组成,范围从 1 到略小于 2,不包括端点。"array3"由 5 个值(范围从 0 到 10)创建,并返回数组以及连续值之间的步长 -
import numpy as np # 创建一个包含 10 个值(范围从 0 到 5)的数组 array1 = np.linspace(0, 5, num=10) print("array1:",array1) # 创建一个包含 5 个值(范围从 1 到 2,不包括端点)的数组 array2 = np.linspace(1, 2, num=5, end=False) print("array2:",array2) # 创建一个数组并返回步长 array3, step = np.linspace(0, 10, num=5, retstep=True) print("array3:",array3) print("步长:", step)
这将产生以下结果 -
array1: [0. 0.55555556 1.11111111 1.66666667 2.22222222 2.77777778 3.33333333 3.88888889 4.44444444 5. ] array2: [1. 1.2 1.4 1.6 1.8] array3: [ 0. 2.5 5. 7.5 10. ] 步长: 2.5
使用 random.rand() 函数
或者,我们可以使用 numpy.random.rand() 函数,通过指定数组的维度作为参数来创建数组。
此函数用于创建一个指定形状的数组,该数组填充从 [0, 1) 上的均匀分布中采样的随机值。
它接受数组维度的参数(例如 numpy.random.rand(rows, columns)),并生成一个指定形状的数组,其中包含 0 到 1 之间的随机值。如果没有提供参数,则返回一个随机浮点值。语法如下:-
numpy.random.rand(d0, d1, ..., dn)
示例
在以下示例中,我们使用 numpy.random.rand() 函数生成不同维度的随机浮点数数组:-
import numpy as np # 生成单个随机浮点数 random_float = np.random.rand() print("random_float:",random_float) # 生成一维随机浮点数数组 array_1d = np.random.rand(5) print("array_1d:",array_1d) # 生成二维随机浮点数数组浮点数 array_2d = np.random.rand(2, 3) print("array_2d:",array_2d) # 生成一个随机浮点数的三维数组 array_3d = np.random.rand(2, 3, 4) print("array_3d:",array_3d)
以下是上述代码的输出 -
random_float: 0.5030496450079744 array_1d: [0.19476581 0.54430648 0.64571106 0.27443774 0.71874319] array_2d: [[0.91141582 0.58847504 0.37284854] [0.0715398 0.21305363 0.766954 ]] array_3d: [[[0.7295106 0.1582053 0.91376381 0.14099229] [0.6876814 0.19351871 0.18056163 0.61370308] [0.42382443 0.6665121 0.42322218 0.11707395]] [[0.60883975 0.01724199 0.95753734 0.17805716] [0.47770594 0.55840874 0.7375783 0.50512301] [0.73730351 0.85900855 0.16472072 0.2338285 ]]]
使用 numpy.empty() 函数
我们可以使用 numpy.empty() 函数创建一个 NumPy 数组,并将数组的形状指定为参数。
此函数初始化数组但不初始化其元素;数组的内容是任意的,并且可能会有所不同。当您需要一个特定大小和数据类型的数组,但打算稍后用数据填充它时,它非常有用。以下是语法:
numpy.empty(shape, dtype=float, order='C')
与 numpy.zeros() 函数和 numpy.ones() 函数(它们分别将数组元素初始化为零和一)不同,numpy.empty() 函数不会初始化元素。相反,它会分配数组所需的内存,而不设置任何值。
示例
在此示例中,我们使用 numpy.empty() 函数创建一个包含 2 行 3 列的二维数组 (empty_array) -
import numpy as np empty_array = np.empty((2, 3)) print(empty_array)
获得的输出如下所示 -
[[1.13750619e-313 0.00000000e+000 0.00000000e+000] [0.00000000e+000 0.00000000e+000 0.00000000e+000]]
与 numpy.zeros() 不同,此函数使用未初始化的值初始化数组,这些值可以是内存中剩余的任何随机数据,因此适用于不需要立即初始化的情况。
使用 numpy.full() 函数
使用 numpy.full() 函数,我们可以创建一个具有所需形状的数组,并将其中的所有元素设置为特定值。语法如下:-
numpy.full(shape, fill_value, dtype=None, order='C')
示例
在下面的示例中,我们使用 numpy.full() 函数创建一个维度为 2x3 的二维数组,并全部填充值 5:-
import numpy as np array1 = np.full((2, 3), 5) print(array1)
执行上述代码后,我们得到以下输出:-
[[5 5 5] [5 5 5]]
用于NumPy 数组的创建
在 NumPy 模块中,有多种创建 NumPy 数组的方法,包括基本创建方法、通过重塑和修改数据创建、使用序列创建以及使用随机函数创建。以下是用于创建 NumPy 数组的不同函数 -
基本数组创建
以下是创建数组的基本函数 -
Sr.No. | 功能 &说明 |
---|---|
1 |
array()
用于创建 NumPy 数组 |
2 |
asarray()
将输入转换为数组 |
3 |
asanyarray()
将输入转换为 ndarray,但传递 ndarray 子类至 |
4 |
copy()
返回给定对象的数组副本 |
使用特定形状和数据创建数组
以下是用于创建具有指定形状和数据的数组的函数 -
Sr.No. | 函数 &说明 |
---|---|
1 |
zeros()
返回一个给定形状和类型的新数组,并用零填充 |
2 |
ones()
返回一个给定形状和类型的新数组,并用一填充 |
3 |
empty()
返回一个给定形状和类型的新数组,但不初始化元素 |
4 |
full()
返回一个具有给定形状和类型的新数组,并使用 fill_value 进行填充 |
使用序列创建数组
以下是用于创建带有序列的数组的函数 -
Sr.No. | 函数 &说明 |
---|---|
1 |
arange()
返回给定区间内等距的值 |
2 |
linspace()
返回指定区间内等距的数字。 |
3 |
logspace()
返回对数尺度上等距的数字。 |
特殊数组
以下是创建数组的特殊函数 -
Sr.No. | 函数 &说明 |
---|---|
1 |
eye()
返回一个二维数组,对角线上为 1,其他位置为 0 |
2 |
identity()
返回恒等数组。 |
3 |
diag()
提取对角线或构建对角数组 |
4 |
fromfunction()
通过在每个坐标上执行函数来构建数组 |
5 |
fromfile()
根据文本或二进制文件中的数据构建数组 |
随机数组
以下是创建数组的随机函数 -
Sr.No. | 函数 &说明 |
---|---|
1 |
random.rand()
给定形状的随机值 |
2 |
random.randn()
返回标准正态分布的样本 |
3 |
random.randint()
返回从低(含)到高的随机整数(独占) |
4 |
random.random()
返回半开区间 [0.0, 1.0) 内的随机浮点数 |
5 |
random.choice()
从给定的一维数组生成随机样本 |
结构化数组
以下是用于创建数组的结构化函数 -
序号 | 功能与说明 |
---|---|
1 |
zeros_like()
返回一个由零元素组成的数组,其形状和类型与给定数组相同 |
2 |
ones_like()
返回一个由一元素组成的数组,其形状和类型与给定数组相同。 |
3 |
empty_like()
返回一个新数组,其与给定数组具有相同形状和类型 |
4 |
full_like()
返回与给定数组具有相同形状和类型的完整数组 |