3.2 使用 NumPy 内置函数创建 NumPy:使用内置函数创建 ndarray NumPy 提供了多种内置函数,可以方便快捷地创建各种类型的 ndarray。这些函数极大地简化了数组的初始化过程,并允许你根据特定需求生成数据。本节将深入探讨这些函数的使用方法和应用场景。 3.2.1 函数类似于 Python 的 函数,但它返回的是一个 ndarray,而不是一个列表。它可以创建指定范围内均匀间隔的值的数组。 语法: (可选): 序列的起始值,默认为 0。 : 序列的结束值(不包含)。 (可选): 步长,默认为 1。 (可选): 数组的数据类型。如果未指定,则从输入参数推断数据类型。 (可选): 参考对象,允许创建与参考对象具有相同数据类型和其它属性的数组。
NumPy 提供了多种内置函数,可以方便快捷地创建各种类型的 ndarray。这些函数极大地简化了数组的初始化过程,并允许你根据特定需求生成数据。本节将深入探讨这些函数的使用方法和应用场景。
arange()arange() 函数类似于 Python 的 range() 函数,但它返回的是一个 ndarray,而不是一个列表。它可以创建指定范围内均匀间隔的值的数组。
语法:
numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)
start (可选): 序列的起始值,默认为 0。
stop: 序列的结束值(不包含)。
step (可选): 步长,默认为 1。
dtype (可选): 数组的数据类型。如果未指定,则从输入参数推断数据类型。
like (可选): 参考对象,允许创建与参考对象具有相同数据类型和其它属性的数组。
示例:
import numpy as np # 创建一个从 0 到 9 的整数数组 arr1 = np.arange(10) print(arr1) # 输出: [0 1 2 3 4 5 6 7 8 9] # 创建一个从 2 到 20,步长为 2 的整数数组 arr2 = np.arange(2, 21, 2) print(arr2) # 输出: [ 2 4 6 8 10 12 14 16 18 20] # 创建一个从 0 到 1,步长为 0.1 的浮点数数组 arr3 = np.arange(0, 1.1, 0.1) print(arr3) # 输出: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
注意事项:
arange() 函数的 stop 值不包含在生成的数组中。
使用浮点数作为步长时,由于浮点数精度问题,结果可能不完全符合预期。建议使用 linspace() 函数来避免此类问题。
linspace()linspace() 函数用于创建指定范围内均匀间隔的值的数组,与 arange() 不同的是,它可以精确控制数组中元素的数量。
语法:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
start: 序列的起始值。
stop: 序列的结束值。
num (可选): 数组中元素的数量,默认为 50。
endpoint (可选): 是否包含 stop 值,默认为 True。
retstep (可选): 是否返回步长,默认为 False。
dtype (可选): 数组的数据类型。
axis (可选): 沿着哪个轴存储样本。
示例:
import numpy as np # 创建一个包含 5 个元素的数组,从 0 到 1 arr1 = np.linspace(0, 1, 5) print(arr1) # 输出: [0. 0.25 0.5 0.75 1. ] # 创建一个包含 10 个元素的数组,从 1 到 10,不包含 10 arr2 = np.linspace(1, 10, 10, endpoint=False) print(arr2) # 输出: [1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1] # 创建一个包含 5 个元素的数组,从 0 到 1,并返回步长 arr3, step = np.linspace(0, 1, 5, retstep=True) print(arr3) # 输出: [0. 0.25 0.5 0.75 1. ] print(step) # 输出: 0.25
流程图:
logspace()logspace() 函数用于创建在对数刻度上均匀间隔的值的数组。
语法:
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
start: 序列的起始值(base ** start)。
stop: 序列的结束值(base ** stop)。
num (可选): 数组中元素的数量,默认为 50。
endpoint (可选): 是否包含 stop 值,默认为 True。
base (可选): 对数的底数,默认为 10.0。
dtype (可选): 数组的数据类型。
axis (可选): 沿着哪个轴存储样本。
示例:
import numpy as np # 创建一个包含 5 个元素的数组,从 10^0 到 10^4 arr1 = np.logspace(0, 4, 5) print(arr1) # 输出: [1.e+00 1.e+01 1.e+02 1.e+03 1.e+04] # 创建一个包含 10 个元素的数组,从 2^1 到 2^10 arr2 = np.logspace(1, 10, 10, base=2) print(arr2) # 输出: [ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]
zeros()、ones() 和 full()zeros() 函数创建一个由 0 填充的数组。
ones() 函数创建一个由 1 填充的数组。
full() 函数创建一个由指定值填充的数组。
语法:
numpy.zeros(shape, dtype=float, order='C', *, like=None) numpy.ones(shape, dtype=None, order='C', *, like=None) numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)
shape: 数组的形状(整数或整数元组)。
dtype (可选): 数组的数据类型。
order (可选): 内存存储顺序,'C' 表示 C 风格(行优先),'F' 表示 Fortran 风格(列优先)。
fill_value (full() 函数): 填充数组的值。
示例:
import numpy as np # 创建一个形状为 (2, 3) 的全零数组 arr1 = np.zeros((2, 3)) print(arr1) # 输出: # [[0. 0. 0.] # [0. 0. 0.]] # 创建一个形状为 (4,) 的全一整数数组 arr2 = np.ones(4, dtype=int) print(arr2) # 输出: [1 1 1 1] # 创建一个形状为 (2, 2) 的数组,所有元素都为 7 arr3 = np.full((2, 2), 7) print(arr3) # 输出: # [[7 7] # [7 7]]
eye() 和 identity()eye() 函数创建一个对角线为 1,其余元素为 0 的二维数组(单位矩阵)。
identity() 函数也创建一个单位矩阵,但只能创建方阵。
语法:
numpy.eye(N, M=None, k=0, dtype=float, order='C', *, like=None) numpy.identity(n, dtype=None, *, like=None)
N: 行数。
M (可选): 列数,如果未指定,则默认为 N。
k (可选): 对角线的索引。0 表示主对角线,正数表示上对角线,负数表示下对角线。
n: 方阵的维数。
示例:
import numpy as np # 创建一个 3x3 的单位矩阵 arr1 = np.eye(3) print(arr1) # 输出: # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] # 创建一个 4x5 的矩阵,对角线为 1 arr2 = np.eye(4, 5, k=1) # k=1 表示上对角线 print(arr2) # 输出: # [[0. 1. 0. 0. 0.] # [0. 0. 1. 0. 0.] # [0. 0. 0. 1. 0.] # [0. 0. 0. 0. 1.]] # 创建一个 2x2 的单位矩阵 arr3 = np.identity(2) print(arr3) # 输出: # [[1. 0.] # [0. 1.]]
empty()empty() 函数创建一个未初始化的数组。数组中的值是随机的,取决于内存中的现有数据。 使用这个函数可以快速的分配数组空间,但是需要注意在使用前进行赋值,否则可能会出现不可预测的结果。
语法:
numpy.empty(shape, dtype=float, order='C', *, like=None)
shape: 数组的形状。
dtype (可选): 数组的数据类型。
order (可选): 内存存储顺序。
示例:
import numpy as np # 创建一个形状为 (2, 3) 的空数组 arr1 = np.empty((2, 3)) print(arr1) # 输出 (可能的结果): # [[6.9e-310 0.0e+000 0.0e+000] # [0.0e+000 0.0e+000 0.0e+000]]
警告: empty() 创建的数组包含随机数据,使用前务必进行初始化。
random 模块中的函数NumPy 的 random 模块提供了各种用于生成随机数的函数,可以用来创建包含随机数据的 ndarray。 常见的函数包括:
rand(): 创建一个给定形状的数组,包含从 [0, 1) 均匀分布中抽取的随机样本。
randn(): 创建一个给定形状的数组,包含从标准正态分布(均值为 0,标准差为 1)中抽取的随机样本。
randint(): 创建一个给定形状的数组,包含在指定范围内随机抽取的整数。
random(): 创建一个给定形状的数组,包含从 [0.0, 1.0) 均匀分布中抽取的随机样本。 (与 rand() 类似)
示例:
import numpy as np # 创建一个形状为 (3, 2) 的数组,包含 [0, 1) 之间的随机数 arr1 = np.random.rand(3, 2) print(arr1) # 创建一个形状为 (2, 2) 的数组,包含标准正态分布的随机数 arr2 = np.random.randn(2, 2) print(arr2) # 创建一个形状为 (5,) 的数组,包含 0 到 9 之间的随机整数 arr3 = np.random.randint(0, 10, 5) print(arr3) # 创建一个形状为 (4,) 的数组,包含 [0.0, 1.0) 之间的随机数 arr4 = np.random.random(4) print(arr4)
流程图 (以 randint() 为例):
NumPy 提供了丰富的内置函数,用于创建各种类型的 ndarray。选择合适的函数取决于你的具体需求。
arange(): 创建指定范围内均匀间隔的值的数组。
linspace(): 创建指定范围内均匀间隔的值的数组,可以精确控制元素数量。
logspace(): 创建在对数刻度上均匀间隔的值的数组。
zeros()、ones()、full(): 创建由特定值填充的数组。
eye()、identity(): 创建单位矩阵。
empty(): 创建未初始化的数组(需注意初始化)。
random 模块: 创建包含随机数据的数组。
熟练掌握这些函数,可以大大提高你在 NumPy 中处理数据的效率。