array = np.array([[1, 2], [3, 4], [5, 6]])
print(array+2)
# [[3 4]
# [5 6]
# [7 8]]
print(array-2)
# [[-1 0]
# [ 1 2]
# [ 3 4]]
print(array*2)
# [[ 2 4]
# [ 6 8]
# [10 12]]
print(array/2)
# [[0.5 1. ]
# [1.5 2. ]
# [2.5 3. ]]
print(array ** 2)
# [[ 1 4]
# [ 9 16]
# [25 36]]
np.sum(arr, axis=None, keepdims=np._NoValue, initial=np._NoValue)
计算数组中所有元素的和
import numpy as np
# 一维数组相加
print(np.sum([1, 2, 3, 4])) # 10
# 二维数组相加
print(np.sum([[1, 2], [3, 4]])) # 10
# 初始值相加
print(np.sum([1, 2, 3, 4], initial=5)) # 15
# 沿行相加
print(np.sum([[1, 2], [3, 4]], axis=1)) # [3 7]
# 沿列相加
print(np.sum([[1, 2], [3, 4]], axis=0)) # [4 6]
# 沿行相加,结果不降维
print(np.sum([[1, 2], [3, 4]], axis=1, keepdims=True))
# [[3]
# [7]]
# 沿列相加,结果不降维
print(np.sum([[1, 2], [3, 4]], axis=0, keepdims=True))
# [[4 6]]
np.mean(arr, axis=None,keepdims=False)
返回沿给定轴的平均值,axis没有指定时,默认为None,表示返回所有元素的平均值
import numpy as np
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr = np.array(lis)
# 打印数组
print(arr)
#[[ 0 1 7 3]
# [ 4 9 6 2]
# [ 8 5 11 10]]
# 计算所有均值
print(np.mean(arr)) # 5.5
# 计算每列的均值
print(np.mean(arr, axis=0)) # [4. 5. 8. 5.]
# 计算每行的均值
print(np.mean(arr, axis=1)) # [2.75 5.25 8.5 ]
np.var(arr, axis=None, ddof=0, keepdims=False)
返回沿给定轴的方差,axis没有指定时,默认为None,表示返回所有元素的方差。
方差是每个数据与平均值之差的平方的平均值,用于衡量数据的离散程度
import numpy as np
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr = np.array(lis)
# 打印数组
print(arr)
#[[ 0 1 7 3]
# [ 4 9 6 2]
# [ 8 5 11 10]]
# 计算数组全部数据的方差
print(np.var(arr)) # 11.916666666666666
# 计算数组的列方差
print(np.var(arr, axis=0)) # [10.66666667 10.66666667 4.66666667 12.66666667]
# 计算数组的行方差
print(np.var(arr, axis=1)) # [7.1875 6.6875 5.25 ]
np.std(arr, axis=None, ddof=0,keepdims=False)
返回沿给定轴的标准差,axis没有指定时,默认为None,表示返回所有元素的标准差
标准差是方差的平方根,用于衡量数据的离散程度
import numpy as np
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr = np.array(lis)
# 打印数组
print(arr)
# [[ 0 1 7 3]
# [ 4 9 6 2]
# [ 8 5 11 10]]
# 计算所有数据标准差
print(np.std(arr)) # 3.452052529534663
# 计算每一列的标准差
print(np.std(arr, axis=0)) # [3.26598632 3.26598632 2.1602469 3.55902608]
# 计算每一行的标准差
print(np.std(arr, axis=1)) # [2.68095132 2.58602011 2.29128785]
np.max(arr, axis=None,keepdims=False)
返回沿给定轴的最大值,axis没有指定时,默认为None,表示返回所有元素的最大值
import numpy as np
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr = np.array(lis)
# 打印数组
print(arr)
# [[ 0 1 7 3]
# [ 4 9 6 2]
# [ 8 5 11 10]]
# 获取所有数据最大值
print(np.max(arr)) # 11
# 获取每列的最大值
print(np.max(arr, axis=0)) # [ 8 9 11 10]
# 获取每行的最大值
print(np.max(arr, axis=1)) # [ 7 9 11]
np.min(arr, axis=None,keepdims=False)
返回沿给定轴的最小值,axis没有指定时,默认为None,表示返回所有元素的最小值
import numpy as np
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr = np.array(lis)
# 打印数组
print(arr)
# [[ 0 1 7 3]
# [ 4 9 6 2]
# [ 8 5 11 10]]
# 获取所有数据最小值
print(np.min(arr)) # 0
# 获取每列的最小值
print(np.min(arr, axis=0)) # [0 1 6 2]
# 获取每行的最小值
print(np.min(arr, axis=1)) # [0 2 5]
np.logical_not(arr)
用于对布尔型数组 arr 进行逻辑非(NOT)操作。这个函数会逐个元素地反转数组中的数据,即将 True 变为 False,将 False 变为 True。
import numpy as np
# 创建一个布尔数组
bool_arr = np.array([True, False, True, False])
not_arr = np.logical_not(bool_arr)
print(not_arr)
# [False True False True]
逻辑非操作通常用于条件筛选或在布尔逻辑中实现取反的功能。
注意事项:
np.logical_and(arr1, arr2) 或 arr1 & arr2
用于计算两个数组的按元素逻辑与(AND)操作。对于输入数组中的每个对应位置的元素,如果两个元素都是 True(或者在布尔上下文中相当于非零或非空),那么结果数组中相应位置的元素为 True,否则为 False。
广播机制:
如果输入数组的形状不完全相同,NumPy 会根据广播规则将它们广播到相同的形状,然后进行逻辑与操作。广播规则允许较小的数组根据需要扩展以匹配较大数组的形状。
import numpy as np
# 创建两个布尔数组
bool_arr1 = np.array([True, False, True, True])
bool_arr2 = np.array([True, True, False, False])
# 使用 logical_and 函数
result = np.logical_and(bool_arr1, bool_arr2)
print(result)
# [ True False True False]
result 数组中的每个元素都是根据 bool_arr1 和 bool_arr2 中相应位置的元素进行逻辑与操作得到的。
注意事项:
numpy.logical_or(arr1, arr2) 或 arr1 | arr2
用于对两个数组进行按元素的逻辑或(OR)操作。对于两个输入数组 arr1 和 arr2 中的每个对应位置的元素,如果至少有一个元素是 True(或者在布尔上下文中相当于非零或非空),那么结果数组中相应位置的元素将为 True;如果两个元素都是 False,则结果为 False。
广播机制:
如果输入数组的形状不完全相同,NumPy 会根据广播规则将它们广播到相同的形状,然后进行逻辑或操作。广播规则允许较小的数组根据需要扩展以匹配较大数组的形状。
import numpy as np
# 创建两个布尔数组
bool_arr1 = np.array([True, False, True, False])
bool_arr2 = np.array([False, True, False, True])
# 使用 logical_or 函数
result = np.logical_or(bool_arr1, bool_arr2)
print(result)
# [ True True True True]
在这个例子中,result 数组中的每个元素都是根据 bool_arr1 和 bool_arr2 中相应位置的元素进行逻辑或操作得到的。
注意事项:
np.logical_xor(arr1, arr2,)
执行按元素的逻辑异或(XOR)操作。对于两个输入数组 arr1 和 arr2 中的每个对应位置的元素,如果两个元素的逻辑值不同,结果数组中相应位置的元素将为 True;如果两个元素的逻辑值相同,则结果为 False。
import numpy as np
# 创建两个布尔数组
bool_arr1 = np.array([True, False, True, False])
bool_arr2 = np.array([False, True, False, True])
# 使用 logical_xor 函数
result = np.logical_xor(bool_arr1, bool_arr2)
print(result)
# [ True True False True]
在这个例子中,result 数组中的每个元素都是根据 bool_arr1 和 bool_arr2 中相应位置的元素进行逻辑异或操作得到的。
注意事项:
np.equal(arr1, arr2) 或 arr1 == arr2
按元素判断 arr1 == arr2 的结果
import numpy as np
print(np.equal([4, 2], [2, 2])) # [False True]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.equal(a, b))
# [[False True]
# [False False]]
print(a == b)
# [[False True]
# [False False]]
np.not_equal(arr1, arr2) 或 arr1 != arr2
按元素判断 arr1 != arr2 的结果
import numpy as np
print(np.not_equal([4, 2], [2, 2])) # [ True False]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.not_equal(a, b))
# [[True False]
# [True True]]
print(a != b)
# [[True False]
# [True True]]
np.greater(arr1, arr2) 或 arr1 > arr2
按元素判断 arr1 > arr2 的结果
import numpy as np
print(np.greater([4, 2], [2, 1])) # [ True True]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.greater(a, b))
# [[True False]
# [True False]]
print(a > b)
# [[True False]
# [True False]]
np.less(arr1, arr2) 或 arr1 < arr2
按元素判断 arr1 < arr2 的结果
import numpy as np
print(np.less([4, 2], [2, 2])) # [False False]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.less(a, b))
# [[False False]
# [False True]]
print(a < b)
# [[False False]
# [False True]]
np.greater_equal(arr1, arr2) 或 arr1 >= arr2
按元素判断 arr1 >= arr2 的结果
print(np.greater_equal([4, 2], [2, 2])) # [ True True]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.greater_equal(a, b))
# [[True True]
# [True False]]
print(a >= b)
# [[True True]
# [True False]]
np.less_equal(arr1, arr2) 或 arr1 <= arr2
按元素判断 arr1 <= arr2 的结果
import numpy as np
print(np.less_equal([4, 2], [2, 2])) # [False True]
a = np.array([[4, 2], [3, 1]])
b = np.array([[2, 2]])
print(np.less_equal(a, b))
# [[False True]
# [False True]]
print(a <= b)
# [[False True]
# [False True]]
np.exp(x)
计算 e 的 x 幂次方
# e的0次方、e的1次方、e的2次方
print(np.exp([0, 1, 2]))
# [1. 2.71828183 7.3890561 ]
np.log(x)
计算 x 的自然对数(以e为底)
print(np.log([1, np.e, np.e ** 2]))
# [0. 1. 2.]
np.log10(x)
计算 x 的以 10 为底的对数
import numpy as np
print(np.log10([1e-15, 1000]))
# [-15. 3.]
np.log2(x)
计算 x 的以 2 为底的对数
import numpy as np
x = np.array([1, 2, 2 ** 4])
print(np.log2(x))
# [0. 1. 4.]
np.dot(a, b)
两个数组的点积
a ⋅ b = a [ 0 ] ∗ b [ 0 ] + a [ 1 ] ∗ b [ 1 ] + . . . + a [ n ] ∗ b [ n ] a · b = a[0] * b[0] + a[1] * b[1] + ... + a[n] * b[n] a⋅b=a[0]∗b[0]+a[1]∗b[1]+...+a[n]∗b[n]
import numpy as np
# 一维数组相乘
a = [1, 2, 3]
b = [1, 0, 2]
print(np.dot(a, b)) # 7
# 二维数组相乘
a = [[1, 0], [0, 1]]
b = [[4, 1], [2, 2]]
print(np.dot(a, b))
# [[4 1]
# [2 2]]
# 标量相乘
print(np.dot(3, 4)) # 12
# 标量与数组相乘
a = 2
b = [[4, 1], [2, 2]]
print(np.dot(a, b))
# [[8 2]
# [4 4]]
np.matmul(a, b)
两个数组的矩阵乘积 @操作符也可表示
a = np.array([[1, 0],
[0, 1]])
b = np.array([[4, 1],[2, 2]])
print(np.matmul(a, b))
# [[4 1]
# [2 2]]
print(a @ b)
# [[4 1]
# [2 2]]
a = np.array([[1, 0],
[0, 1]])
b = np.array([1, 2])
print(np.matmul(a, b))
print(a @ b)
# [1 2]
np.trace(arr, offset=0, axis1=0, axis2=1, dtype=None, out=None)
用于计算一个方阵(或二维数组)的迹(trace),也就是矩阵主对角线上元素的总和。主对角线是指从左上角到右下角的对角线。
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
trace_A = np.trace(A)
print(trace_A) # 输出结果为 1+5+9=15
注意,numpy.trace函数只适用于二维数组,如果输入的是一个多维数组,你需要指定axis1和axis2参数来确定计算迹的二维矩阵。
np.linalg.det(arr)
用于计算一个方阵(即行数和列数相等的二维数组)的行列式。
行列式是一个标量值,它在数学中有许多重要的性质和应用,例如在求解线性方程组、计算矩阵的逆、以及在几何和物理学中描述体积变化等场合。
import numpy as np
# 定义一个2x2的方阵
A = np.array([[1, 2],
[3, 4]])
# 计算方阵A的行列式
det_A = np.linalg.det(A)
print(det_A) # 输出结果为 -2.0
在这个例子中,方阵A的行列式计算如下:
d e t ( A ) = 1 ∗ 4 − 2 ∗ 3 = − 2 det(A)=1*4-2*3 =-2 det(A)=1∗4−2∗3=−2
注意,如果输入的矩阵不是方阵,numpy.linalg.det函数将会抛出错误。此外,如果矩阵是奇异的(即其行列式为0),那么矩阵将没有逆矩阵。
np.linalg.inv(arr)
用于计算一个方阵的逆矩阵。
逆矩阵是一个重要的矩阵概念,它在数学和工程学中有广泛的应用,比如在求解线性方程组、最小二乘问题以及在控制系统分析中。
import numpy as np
# 定义一个2x2的方阵
A = np.array([[1, 2],
[3, 4]])
# 计算方阵A的逆矩阵
A_inv = np.linalg.inv(A)
print(A_inv) # 输出方阵A的逆矩阵
# [[-2. 1. ]
# [ 1.5 -0.5]]
注意,一个矩阵存在逆矩阵的前提是它是非奇异的,即其行列式值非零。如果矩阵是奇异的(行列式为0),那么这个矩阵没有逆矩阵,numpy.linalg.inv函数会抛出一个错误。
此外,矩阵求逆在数值计算中可能会有稳定性问题,特别是对于病态矩阵(ill-conditioned matrices)。
在实际应用中,如果需要解决线性方程组,通常推荐使用numpy.linalg.solve或者numpy.linalg.lstsq等方法,因为它们更加稳定。
下面是如何使用numpy.linalg.solve来解决线性方程组的例子:
import numpy as np
# 定义线性方程组的系数矩阵A和常数项b
A = np.array([[1, 2], [3, 4]])
b = np.array([1, 2])
# 使用numpy.linalg.solve求解线性方程组Ax = b
x = np.linalg.solve(A, b)
print(x) # 输出线性方程组的解
# [0. 0.5]
在上述代码中,numpy.linalg.solve函数会给出线性方程组Ax = b的解向量x,而不直接计算矩阵的逆。
np.linalg.eigvals(arr)
用于计算一个方阵的特征值。
对于一个给定的方阵,其特征值是与特征向量相对应的标量,它们在许多数学和物理问题中扮演着重要角色,比如在稳定性分析、振动问题、量子力学等领域。
import numpy as np
# 定义一个2x2的方阵
A = np.array([[2, -1], [1, 0]])
# 计算方阵A的特征值
eigvals = np.linalg.eigvals(A)
print(eigvals) # 输出方阵A的特征值
# [1.+6.68896751e-09j 1.-6.68896751e-09j]
在这个例子中,方阵A的特征值是满足方程det(A - λI) = 0的λ值,其中I是单位矩阵。对于上述矩阵,特征值计算如下:
d e t ( A − λ I ) = d e t ( 2 − λ − 1 1 0 − λ ) = ( 2 − λ ) ( − λ ) − ( − 1 ) ( 1 ) = λ 2 − 2 λ + 1 det(A-\lambda I)=det\begin{pmatrix} {2-\lambda} && -1\\ {1} && 0-\lambda \end{pmatrix}=(2-\lambda)(-\lambda)-(-1)(1)=\lambda^2-2\lambda+1 det(A−λI)=det(2−λ1−10−λ)=(2−λ)(−λ)−(−1)(1)=λ2−2λ+1
这是一个关于λ的二次方程,其解为特征值。
注意,特征值的计算涉及到求解多项式方程,因此对于高维矩阵,特征值的计算可能会非常复杂。此外,由于数值稳定性的原因,对于病态矩阵或不精确的数据,特征值的计算可能会有误差
numpy.linalg.svd(arr,full_matrices=True, compute_uv=True, hermitian=False)
用于计算一个矩阵的奇异值分解(Singular Value Decomposition,简称SVD)。
奇异值分解是一种将任意矩阵分解为一系列特定矩阵乘积的方法,它在信号处理、统计学、计算机视觉等领域有着广泛的应用。
返回值:
import numpy as np
# 定义一个矩阵
A = np.array([[1, 2, 3],
[4, 5, 6]])
# 计算矩阵A的奇异值分解
u, s, vh = np.linalg.svd(A, full_matrices=False, compute_uv=True)
print("U matrix:", u)
# U matrix:
# [[-0.3863177 0.92236578]
# [-0.92236578 -0.3863177 ]]
print("Sigma matrix (singular values):", s)
# Sigma matrix (singular values):
# [9.508032 0.77286964]
print("V^H matrix (right singular vectors):", vh)
# V^H matrix (right singular vectors):
# [[-0.42866713 -0.56630692 -0.7039467 ]
# [-0.80596391 -0.11238241 0.58119908]]
奇异值分解的结果可以表示为:
A = U ∑ V H A=U \sum V^H A=U∑VH
其中:
奇异值分解的一个重要性质是,它可以提供矩阵的低秩近似,这在数据压缩和降维中非常有用。此外,矩阵的奇异值可以提供关于矩阵性质的重要信息,比如矩阵的范数和条件数。
np.around(arr,decimals=0)
函数用于将数组中的元素舍入到最接近的整数,或者指定的小数位数。
import numpy as np
# 定义一个数组
arr = np.array([3.14, 2.71, 1.62, 2.99])
# 将数组中的每个元素四舍五入到最接近的整数
rounded_arr = np.around(arr)
print(rounded_arr) # 输出: [3. 2. 2. 3.]
# 将数组中的每个元素四舍五入到最接近的十分位
rounded_arr_dec = np.around(arr, decimals=1)
print(rounded_arr_dec) # 输出: [3.1 2.7 1.6 3.0]
numpy.around函数的舍入策略是向距离相等的两个整数中,舍入到较小的那个整数。这与标准的四舍五入策略(即向更接近的整数舍入)不同。
如果你需要标准的四舍五入行为,可以使用numpy.round函数,它的舍入策略是看小数部分的第一位,如果大于等于0.5则向上舍入,否则向下舍入。
arr.astype(newtype)
用于将arr数组中的数据转换为指定数据类型的表达式。
import numpy as np
# 定义一个数组,初始数据类型为float64
arr = np.array([1, 2, 3, 4], dtype=np.float64)
# 将数组的数据类型转换为int32
arr_int32 = arr.astype(np.int32)
print(arr_int32) # 输出: [1 2 3 4]
print(arr_int32.dtype) # 输出数据类型: int32
astype方法非常有用,尤其是在需要确保数组数据类型满足特定算法或数据处理步骤要求时。例如,某些机器学习算法可能需要输入数据为整数类型或浮点数类型,使用astype可以方便地进行转换。
此外,astype方法在内存使用和性能优化中也很重要,因为不同的数据类型占用的内存空间不同,计算效率也有差异。通过选择合适的数据类型,可以减少内存使用,提高计算速度。
numpy.floor(arr), numpy.ceil(arr)
numpy.floor和numpy.ceil函数分别用于对数组中的每个元素进行向下舍入(floor)和向上舍入(ceil)操作。
numpy.floor(arr)
numpy.floor函数将数组中的每个元素舍入到小于或等于该元素的最小整数。
numpy.ceil(arr)
numpy.ceil函数将数组中的每个元素舍入到大于或等于该元素的最小整数。
import numpy as np
# 定义一个数组
arr = np.array([3.14, 2.71, 1.62, 2.99])
# 使用numpy.floor向下舍入
floored_arr = np.floor(arr)
print("Floored array:", floored_arr) # 输出: [3. 2. 1. 2.]
# 使用numpy.ceil向上舍入
ceiled_arr = np.ceil(arr)
print("Ceiled array:", ceiled_arr) # 输出: [4. 3. 2. 3.]
在上述示例中,numpy.floor将每个元素舍入到小于或等于它们自身的最小整数,而numpy.ceil则将每个元素舍入到大于或等于它们自身的最小整数。
numpy.any(arr, axis=None, out=None, keepdims=False)
用于检查输入数组中是否有任何元素是非零的(对于布尔类型数组,检查是否有任何元素是True)
返回值:
import numpy as np
# 定义一个数组
arr = np.array([[True, False], [False, True]])
# 使用numpy.any检查数组中是否有任何True值
any_true = np.any(arr)
print(any_true) # 输出: True
# 定义一个没有True值的数组
arr_no_true = np.array([[False, False], [False, False]])
# 使用numpy.any检查数组中是否有任何True值
any_true_no = np.any(arr_no_true)
print(any_true_no) # 输出: False
numpy.any函数可以用于多种情况,包括:
检查一个布尔数组是否包含任何True值。
检查一个非布尔数组是否包含任何非零元素。
用于条件语句,以决定是否基于数组中的某些元素的值执行特定的操作。
numpy.all(arr, axis=None, out=None, keepdims=False)
用于检查输入数组中的所有元素是否都满足某个条件。对于布尔类型数组,它会检查所有元素是否都为True。对于非布尔数组,通常检查所有元素是否都非零。
返回值:
import numpy as np
# 定义一个布尔数组
bool_arr = np.array([True, True, True])
# 使用numpy.all检查数组中的所有元素是否都是True
all_true = np.all(bool_arr)
print(all_true) # 输出: True
# 定义一个包含False的布尔数组
bool_arr_with_false = np.array([True, False, True])
# 使用numpy.all检查数组中的所有元素是否都是True
not_all_true = np.all(bool_arr_with_false)
print(not_all_true) # 输出: False
# 定义一个数值数组
num_arr = np.array([1, 2, 3])
# 使用numpy.all检查数组中的所有元素是否都非零
all_nonzero = np.all(num_arr)
print(all_nonzero) # 输出: True
# 定义一个包含零的数值数组
num_arr_with_zero = np.array([1, 0, 3])
# 使用numpy.all检查数组中的所有元素是否都非零
not_all_nonzero = np.all(num_arr_with_zero)
print(not_all_nonzero) # 输出: False
numpy.all函数可以用于多种情况,包括:
import numpy as np
rng = np.random.default_rng() # 创建一个随机数生成器实例
sample = rng.random()
print(sample)
# 0.07625147013457467
samples = rng.random(size=5)
print(samples)
# [0.88773144 0.12345188 0.64482947 0.10995531 0.88079215]
np.random.randint(low, high, size=None)
用于生成一个或多个随机整数,这些整数从 low(包含)到 high(不包含)之间均匀分布。如果 high 没有指定,则默认为 low 的值加一。
1.生成一个随机整数:
import numpy as np
random_int = np.random.randint(1, 10)
print(random_int)
# 5
2、生成指定数量的随机整数:
import numpy as np
# 随机生成5个1-10的整数
random_integers = np.random.randint(1, 10, size=5)
print(random_integers)
# [7 1 6 8 6]
3、生成指定形状的随机整数数组:
import numpy as np
# 生成随机整数,每一行数据在[1,10),3行4列
random_integers = np.random.randint(1, 10, size=(3, 4))
print(random_integers)
# [[5 5 4 3]
# [9 6 4 9]
# [6 4 1 2]]
4、生成从0开始的随机整数(不指定 high):
import numpy as np
# 没有指定 high,所以随机整数的范围是从0到10(不包含10)。
random_integers = np.random.randint(10, size=5)
print(random_integers)
# [2 7 1 7 2]
np.random.randn(d0, d1, …, dn)
用于生成标准正态分布(均值为0,标准差为1)的随机样本。
1、生成一个标准正态分布的随机样本:
import numpy as np
sample = np.random.randn()
print(sample)
# 0.8171323496331089
2、生成多个标准正态分布的随机样本,指定 size 参数:
import numpy as np
samples = np.random.randn(5)
print(samples)
# [-0.15842107 -0.35061045 0.20003743 -1.08743635 0.22300377]
size=5 意味着生成一个包含5个随机样本的数组,每个样本都是从标准正态分布中抽取的。
3、生成具有特定均值和标准差的正态分布样本:
import numpy as np
mean = 0 # 均值
std_dev = 2 # 标准差
samples = mean + std_dev * np.random.randn(5)
print(samples)
# [ 2.73899853 -1.33176561 -1.97492163 -0.69672498 0.07173888]
这里,我们首先定义了均值 mean 和标准差 std_dev,然后通过 mean + std_dev * np.random.randn(size) 来生成具有特定均值和标准差的正态分布样本。这里,我们首先定义了均值 mean 和标准差 std_dev,然后通过 mean + std_dev * np.random.randn(size) 来生成具有特定均值和标准差的正态分布样本。
注意:
① numpy.random.randn 函数生成的是浮点数,如果需要生成整数,可以使用 np.random.randint 或其他相关函数。
② 此外,np.random.randn 函数生成的是连续的正态分布样本,而不是离散的整数
np.random.uniform(low, high, size=None)
用于生成在指定范围内均匀分布的随机样本。这个函数的参数 low 和 high 指定了随机数的最小值和最大值,而 size 参数则用来指定输出数组的形状。
1、生成一个在 [0, 1) 范围内均匀分布的随机数:
import numpy as np
random_number = np.random.uniform(low=0.0, high=1.0)
print(random_number)
# 0.7499954845659931
2、生成多个随机数,指定 size 参数:
import numpy as np
random_numbers = np.random.uniform(low=0.0, high=1.0, size=5)
print(random_numbers)
# [0.57950386 0.2547959 0.89262127 0.64685615 0.89779286]
3、生成具有特定形状的随机数数组:
import numpy as np
random_numbers = np.random.uniform(low=0.0, high=1.0, size=(3, 4))
print(random_numbers)
这里 size=(3, 4) 表示生成一个3行4列的数组,数组中的每个元素都是从 [0, 1) 范围内均匀分布的随机数。
4、生成在不同范围内的随机数:
import numpy as np
random_numbers = np.random.uniform(low=-5.0, high=5.0, size=(2, 2))
print(random_numbers)
# [[0.21063845 0.16785233]
# [0.07805075 3.98533615]]
在这个例子中,随机数的范围是 [-5, 5)。
np.random.uniform 函数在需要生成特定范围内均匀分布的随机数时非常有用,例如在模拟实验、随机抽样、游戏开发等场景中。
np.random.permutation(x)
print(np.random.permutation(6)) # [5 1 2 0 4 3]
arr1 = np.array([0, 1, 2, 3, 4, 5])
print(np.random.permutation(arr1)) # [4 0 3 1 5 2]
arr2 = np.arange(10).reshape(5, 2)
print(np.random.permutation(arr2))
# [[2 3]
# [6 7]
# [4 5]
# [0 1]
# [8 9]]
np.random.seed(x)
当你设置了一个种子值后,NumPy 的随机数生成器将会产生一个可预测的、确定的随机数序列。这意味着,每次你使用相同的种子值初始化随机数生成器时,你都会得到相同的随机数序列。
这在需要结果可复现性的情况下非常有用,比如在科学研究、机器学习和调试过程中。
种子(seed)是一个初始值,它用于启动随机数生成器的算法。如果不设置种子,NumPy 的随机数生成器会默认使用一个系统提供的随机或伪随机种子,这通常会导致每次运行程序时生成不同的随机数序列。
np.random.seed(3)
print(np.random.uniform(1, 2, size=4)) # [1.5507979 1.70814782 1.29090474 1.51082761]
np.random.seed(5)
print(np.random.uniform(1, 2, size=4)) # [1.22199317 1.87073231 1.20671916 1.91861091]
np.random.seed(3)
print(np.random.uniform(1, 2, size=4)) # [1.5507979 1.70814782 1.29090474 1.51082761]
np.random.normal(loc=0.0, scale=1.0, size=None)
import numpy as np
print(np.random.normal(3, 2.5, size=(2, 4)))
# [[-0.99076962 2.01174106 0.23579857 4.14366161]
# [ 1.87438832 8.13918791 1.62049807 9.3790898 ]]