NumPyNumerical Python专门用来做「数值计算」的 Python 核心库弥补Python高性能科学计算的缺失是数据分析、机器学习、深度学习等基础库。安装pip install numpy导入import numpy as np # 查看numpy版本 print(np.__version__)np是numpy约定俗成的别名。numpy存储特性python的列表lst [10, 20, 30, 40]lst 是一个指针数组 索引 0 1 2 3 ┌────┬────┬────┬────┐ │ ptr│ptr │ptr │ptr │ -- 存的是地址 └──┼─┴──┼─┴──┼─┴──┼─┘ ▼ ▼ ▼ ▼ 10 20 30 40 -- 数据分散在内存各处每个位置存指针地址数据类型可以随便混内存不连续、散乱、速度慢numpy数组import numpy as np arr np.array([10, 20, 30, 40])arr 是一整块连续内存 内存地址 0x100 0x104 0x108 0x10C ┌────┬────┬────┬────┐ │ 10 │ 20 │ 30 │ 40 │ -- 真正数据连续排列 └────┴────┴────┴────┘数据直接紧挨着存没有指针必须同一类型全 int / 全 float内存连续 → 速度极快数组概念NumPy 数组ndarray就是一块连续、整齐、同类型的数字块可以是 1 条线、1 张表、1 个立方体。它是 Python 里做数值计算、数据分析、画图的基础容器。0维-点-标量1维-线-向量2维-面-矩阵3维-立方体-张量低维度复制多次就成为高纬度。如从上图也可以看到一个立方体复制2次就成了超立方体四次元立方体。数组创建从python创建数组创建一维数组arr1 np.array([1, 2, 3, 4, 5]) print(arr1) arr2 np.array((1, 2, 3, 4, 5)) print(arr2)创建二维数组arr3 np.array([[1, 2, 3], [4, 5, 6]]) print(arr3)创建三维数组arr4np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) print(arr4)指定数据类型创建数组arr_float np.array([1, 2, 3], dtypefloat) print(arr_float) # [1. 2. 3.]arr_int np.array([1.2, 5.8, 9.9], dtypeint) print(arr_int) # [1 5 9] 截断小数部分使用内置函数创建数组全零数组 zerosarr1 np.zeros(5) # 创建一个1维数组元素全为0 print(arr1) # [0. 0. 0. 0. 0.] print(arr1.shape) # (5,) arr2 np.zeros((2, 3)) # 创建一个2维数组元素全为0 print(arr2) # [[0. 0. 0.] # [0. 0. 0.]] print(arr2.shape) # (2, 3) arr3 np.zeros((2, 3, 4)) # 创建一个3维数组元素全为0 print(arr3) # [[[[0. 0. 0. 0.] # [0. 0. 0. 0.]] # [[0. 0. 0. 0.] # [0. 0. 0. 0.]]] print(arr3.shape) # (2, 3, 4)全1数组 onesarr1 np.ones(5) # 创建一个1维数组元素全为0 print(arr1) # [1. 1. 1. 1. 1.] print(arr1.shape) # (5,) arr2 np.ones((2, 3)) # 创建一个2维数组元素全为0 print(arr2) # [[1. 1. 1.] # [1. 1. 1.]] print(arr2.shape) # (2, 3) arr3 np.ones((2, 3, 4)) # 创建一个3维数组元素全为0 print(arr3) # [[[[1. 1. 1. 1.] # [1. 1. 1. 1.]] # [[1. 1. 1. 1.] # [1. 1. 1. 1.]]] print(arr3.shape) # (2, 3, 4)全值数组 fullarr np.full((2, 3), 100) print(arr) # [[100 100 100] # [100 100 100]] print(arr.shape) # (2, 3)空数组 empty记住empty只是向系统申请内存空间不赋值。值仍然是原来的值看起来是随机的效果。使用的empty的有什么用快arr np.empty((2, 3))单位矩阵 eye identity主对角线是1的矩阵是单位矩阵。eye可以创建任意形状的单位矩阵identity只能创建正方形的单位矩阵。arr np.eye(3) print(arr) # [[1. 0. 0. 0.] # [0. 1. 0. 0.] # [0. 0. 1. 0.]] print(arr.shape) # (3, 3) arr np.eye(3, 4) print(arr) # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] print(arr.shape) # (3, 4) arr2 np.identity(3) print(arr2) # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] print(np.identity(3).shape) # (3, 3)使用范围函数创建数组arange创建一维数组arr1 np.arange(10) print(arr1) # [0 1 2 3 4 5 6 7 8 9] arr2 np.arange(1, 10) print(arr2) # [1 2 3 4 5 6 7 8] arr3 np.arange(1, 10, 2) print(arr3) # [1 3 5 7] arr4 np.arange(1, 10, 0.5) print(arr4) # [1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9.]linspace创建一维等间距数组arr1 np.linspace(0, 1, 5) # 生成5个等间距的点包括0和1 print(arr1) # [0. 0.25 0.5 0.75 1. ]logspace生成一维10的等比数列arr1 np.logspace(0, 1, 5) # 10的0次方到10的1次方指数从0 0.25 0.5 0.75 1递增 print(arr1) # [ 1. 1.77827941 3.16227766 5.62341325 10.]数组属性就像图片的属性有什么分辨率、宽度、高度等。ndarray对象元数据数据。这里的元数据就是ndarray对象的属性。ndarray 对象 ├─ 数据缓冲区[1,2,3,4,5,6] 真正的数字 └─ 描述头元数据 ├─ ndim 维度数 ├─ shape 每个维度长度 ├─ dtype 元素数据类型 ├─ itemsize 单个元素占据字节数 ├─ strides 每个维度跨多少字节 ├─ size 元素总个数 ├─ nbytes 数组元素总字节数 └─ data 内存起始指针strides往某一维走 1 格内存里要跳过多少字节假设有一个float648字节的2x3数组跨越一行跳过 3×824 字节跨越一列跳过 8 字节strides 248arr np.array([[1, 2, 3], [4, 5, 6]]) # 数组维度 print(arr.ndim) # 2数组的维度 # 数组形状 print(arr.shape) # (2, 3) 2行2列 # 数组元素类型 print(arr.dtype) # int64 # 单个元素占据字节数 print(arr.itemsize) # 8 # 数组步长 print(arr.strides) # (24, 8) 每个元素的字节数每个维度的步长 # 数组元素个数 print(arr.size) # 6 # 数组元素总字节数 print(arr.nbytes) # 48 # 数组数据 print(arr.data) # memory at 0x0000022491840FB0数组取值一维数组取值arr np.array([1, 2, 3]) # 创建一个1维数组 print(arr) # [1 2 3] print(arr[0]) # 1 print(arr[0:2]) # [1 2] 左闭右开 print(arr[-1]) # 3 print(arr[arr2]) # [2 3] 布尔索引从结果可以看到一维数组的取值方式和python 列表一致。另外注意索引和切片操作是视图非副本。副本是独立内存修改互不影响视图是共享内存改了一个另外一个也变arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 切片是视图不是副本 # 原数组基本属性 print(原数组的形状:, arr.shape) print(原数组的维度:, arr.ndim) print(原数组的元素个数:, arr.size) print(原数组的元素类型:, arr.dtype) print(原数组的每个元素的字节数:, arr.itemsize) print(原数组的每个维度的步长字节数:, arr.strides) print(原数组的总字节数:, arr.nbytes) print(原数组的起始内存地址:, arr.data) # 起始内存地址一样 print(arr的真实内存起始地址:, arr.ctypes.data) # 真实数据和元数组相比偏移量不一样 arr2 arr[2:7] # arr2基本属性 print(arr2的形状:, arr2.shape) print(arr2的维度:, arr2.ndim) print(arr2的元素个数:, arr2.size) print(arr2的元素类型:, arr2.dtype) print(arr2的每个元素的字节数:, arr2.itemsize) print(arr2的每个维度的步长字节数:, arr2.strides) print(arr2的总字节数:, arr2.nbytes) print(arr2的起始内存地址:, arr2.data) # 起始内存地址一样 print(arr2的真实内存起始地址:, arr2.ctypes.data) # 真实数据和元数组相比偏移量不一样二维数组取值二维取值格式为[行列]二维数组有行和列的概念通过行列在一维连续存储。数组多维的概念只是逻辑结构实际底层仍然是一维连续空间。arr np.array([[1, 2, 3], [4, 5, 6]]) # 创建一个2维数组 print(arr) # [[1 2 3] [4 5 6]] # 取行 print(arr[0]) # [1 2 3] 取第一行 print(arr[0:2]) # [[1 2 3] [4 5 6]] 左闭右开 取第一行和第二行 # 取列 print(arr[:, 0]) # [1 4] 取第一列 print(arr[:, 0:2]) # [[1 2] [4 5]] 取第一列和第二列 # 取行列 print(arr[0, 1]) # 2 取第一行第二列 print(arr[0:2, 0:2]) # [[1 2] [4 5]] 取第一行和第二行第一列和第二列 # 列表取多值 print(arr[:, [0, 1]]) # [[1 2] [4 5]] 取第一列和第二列 # 花式索引用「列表 / 数组」去当索引一次性挑出多行、多列、多个点。 # 布尔索引 print(arr[arr 3]) # [4 5 6]取大于大于3的元素 # 用...代替所有维度 print(arr[..., 1]) # [2 5] 取第二列 # 链式取值,一般不推荐速度慢 print(arr[0][1]) # 2 取第一行第二列 # 步长取值、取反 print(arr[:, ::2]) # [[1 3] [4 6]] 第一列、第三列 print(arr[::-1, :]) # [[4 5 6] [1 2 3]] 反转行一维数组取值和二维数组取值小结1.没有逗号取行有逗号逗号左边取行逗号右边取列arr[0]arr[0, 1]2.一个冒号切片二个冒号步长arr[0:2]arr[:, ::2]3.只有冒号没有数字取全部arr[:, 0]4.[]取多值arr[:, [0, 1]]5.布尔按条件取值arr[arr 3]6.链式速度慢不建议使用arr[0][1]7. 点点点所有维度arr[..., 1]三维数组取值三维取值格式为[层行列]arr np.array( [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]] ) # 创建一个3维数组 print(arr) print(arr.shape) # (3, 2, 3) 3个层每个层有2行3列 print(arr[0]) # [[1 2 3] [4 5 6]] 取第一层 print(arr[0, 0]) # [1 2 3] 取第一层第一行 print(arr[0, 0, 0]) # 1 取第一层第一行第一列其它的取值方式类同二维数组取值。数组运算基本算数运算加减乘除a np.array([1, 2, 3]) b np.array([4, 5, 6]) # 加减乘除 print(a b) # [5 7 9] print(a - b) # [-3 -3 -3] print(a * b) # [4 10 18] print(a / b) # [0.25 0.4 0.5]幂运算# 幂运算 print(a**b) # [ 1 32 729]取模# 取模 print(a%b) # [1 2 3]与标量运算标量会被广播到每个元素上# 与标量运算 print(a2) # [3 4 5] print(a-2) # [-1 0 1] print(a*2) # [2 4 6] print(a/2) # [0.5 1. 1.5]比较运算比较运算得到的是布尔值的数组。arr np.array([1, 2, 3, 4, 5]) # 比较运算 print(arr 2) # [False False True True True] print(arr 2) # [ True True False False False] print(arr 2) # [False True False False False] print(arr ! 2) # [ True True True True True]数组间比较a np.array([1, 2, 3]) b np.array([4, 5, 6]) print(a b) # [False False False] print(a b) # [ True True True] print(a b) # [False False False] print(a ! b) # [ True True True]广播机制数组的广播机制允许不同形状的数组进行运算。以一个例子讲解现在有一个(2,3)的矩阵和一个(3,)向量做加法运算1、变维低维度补1(3,)变维成(1,3)2、兼容每个维度上要么相等要么一个是1(2,3) 行维度是2(1,3)行维度是1符合其中一个是1(2,3) 列维度是3(1,3)列维度是3符合相等3、拉伸维度为1的拉伸以匹配另一个数组拉伸行复制上一行拉伸列复制前一列(1,3)变为 (2,3)最后结果为数组变形变形 reshape数组变形要元素个数一致。arr1 np.arange(1, 13) # 生成1维数组元素从1到12 # reshape变形 arr2 arr1.reshape(3, 4) # 将1维数组转换为3行4列的2维数组 print(arr2) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] arr3 arr1.reshape(2, 3, 2) print(arr3) # [[[ 1 2] # [ 3 4] # [ 5 6]] # [[ 7 8] # [ 9 10] # [11 12]]] # 使用-1自动计算维度 arr4 arr1.reshape(2, -1) print(arr4) # [[ 1 2 3 4 5 6] # [ 7 8 9 10 11 12]] # 列优先,F代表fortranFortran是一列一列存储的 arr5 arr1.reshape(3, 4, orderF) print(arr5) # [[ 1 4 7 10] # [ 2 5 8 11] # [ 3 6 9 12]] # 行优先C代表C语言 arr6 arr1.reshape(3, 4, orderC) # 默认 print(arr6) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]]展平 flattenflatten把多维数组压成一维数组展平返回副本。arr1 np.array([[1, 2, 3], [4, 5, 6]]) arr2 arr1.flatten() # 将2维数组转换为1维数组 print(arr2) # [1 2 3 4 5 6] arr2[0] 100 print(arr2) print(arr1)展平 ravelravel把多维数组压成一维数组展平返回视图。arr1 np.array([[1, 2, 3], [4, 5, 6]]) arr2 arr1.ravel() # 将2维数组转换为1维数组 print(arr2) # [1 2 3 4 5 6] arr2[0] 100 print(arr2) print(arr1)转置 transpost / Tarr1 np.array([[1, 2, 3], [4, 5, 6]]) print(arr1) # 2行3列 # [[1 2 3] # [4 5 6]] print(arr1.T) # 3行2列 # [[1 4] # [2 5] # [3 6]] print(arr1.transpose()) # [[1 4] # [2 5] # [3 6]] arr2 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(arr2.shape) # (2, 3, 4) print(arr2.transpose(2, 1, 0)) #默认维度是(0,1,2),现在列维度变层维度层维度变列维度 print(arr2.transpose(2, 1, 0).shape) # (4, 3, 2)交换轴 swapaxesarr np.array([[1, 2, 3], [4, 5, 6]]) arr.swapaxes(1, 0) print(arr) # [[1 2 3] # [4 5 6]]扩展维度 expand_dimsarr np.array([[1, 2, 3], [4, 5, 6]]) # (2,3) print(np.expand_dims(arr, axis0)) # [[[1 2 3] # [4 5 6]]] print(np.expand_dims(arr, axis0).shape) # (1, 2, 3) print(np.expand_dims(arr, axis2)) # [[[1] # [2] # [3]] # [[4] # [5] # [6]]] print(np.expand_dims(arr, axis2).shape) # (2, 3, 1)移除1维度 squeezearr np.array([[1, 2, 3], [4, 5, 6]]).reshape(2, 3, 1) print(arr.shape) # (2, 3, 1) print(arr.squeeze()) # [[1 2 3] # [4 5 6]] print(arr.squeeze().shape) # (2, 3)数组拼接分割vstack 垂直拼接a np.array([[1, 2], [3, 4]]) b np.array([[5, 6], [7, 8]]) # 垂直拼接 print(np.vstack((a, b))) # [[1 2] # [3 4] # [5 6] # [7 8]]hstack 水平拼接a np.array([[1, 2], [3, 4]]) b np.array([[5, 6], [7, 8]]) # 水平拼接 print(np.hstack((a, b))) # [[1 2 5 6] # [3 4 7 8]]concatenate拼接# concatenate拼接 print( np.concatenate((a, b), axis0) ) # axis0 轴0是行以行的方式拼接垂直拼接等同于vstack # [[1 2] # [3 4] # [5 6] # [7 8]] print( np.concatenate((a, b), axis1) ) # axis1 轴1是列以列的方式拼接水平拼接等同于hstack # [[1 2 5 6] # [3 4 7 8]]split分割数组# 分割数组 arr np.arange(12).reshape(4, 3) print(arr) # [[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 9 10 11]] print(np.split(arr, 2, axis0)) # 按行分割2部分 # [array([[0, 1, 2], # [3, 4, 5]]), array([[ 6, 7, 8], # [ 9, 10, 11]])]数学运算通用函数arr np.array([1, 4, 9, 16, 25]) # 求平方根 print(np.sqrt(arr)) # [1. 2. 3. 4. 5. ] # 求e的指数 e^arr x e是欧拉数约等于2.7182818 print(np.exp(arr)) # [2.71828183e00 5.45981500e01 8.10308393e03 8.88611052e06 # 7.20048993e10] # 求自然对数 log e?arrx e^xarr print(np.log(arr)) # [0. 1.38629436 2.19722458 2.77258872 3.21887582] # 求常用对数 log10(arr) x 10^xarr print(np.log10(arr)) # [0. 0.60205999 0.95424251 1.20411998 1.39794001] # 求绝对值 print(np.abs([-1, -2, -3])) # [1 2 3] # 取整 arr2 np.array([1.4, 2.7, 3.5]) # 四舍五入 print(np.round(arr2)) # [1. 3. 4.] # 向上取整 print(np.ceil(arr2)) # [2. 3. 4.] # 向下取整 print(np.floor(arr2)) # [1. 2. 3.]三角函数π和角度关系π是圆周率 π圆的周长/直径。任何大小的圆π都是固定的。弧度弧长/半径圆周长2πrr是半径。一圈圆的弧度2πr/r即一圈弧度是2π弧度。而一圈是360°角度即2π360°π180°也就是弧度和角度的换算关系。sin、cos、tan都是以弧度参与运算的。### 三角函数 radians np.array( [0, np.pi / 6, np.pi / 4, np.pi / 3, np.pi / 2] ) # 0° 30° 45° 60° 90° print(正弦:, np.sin(radians)) # [0. 0.5 0.8660254 0.5 1. ] print(余弦:, np.cos(radians)) # [1. 0.8660254 0.5 0. 1. ] print(正切:, np.tan(radians)) # [0. 1.7320508 1. 1.7320508 1. ] # 角度和弧度抓换 degrees np.array([0, 30, 45, 60, 90]) # 0° 30° 45° 60° 90° print( 弧度:, np.deg2rad(degrees) ) # [0. 0.52359877 0.87266462 1.04719755 1.57079633]聚合函数arr np.array([[1, 2, 3], [4, 5, 6]]) # [[1 2 3] # [4 5 6]] # 求和 print(np.sum(arr)) # 21 # 列求和 print(np.sum(arr, axis0)) # [5 7 9] # 行求和 print(np.sum(arr, axis1)) # [6 15] # 求平均值 print(np.mean(arr)) # 3.5 # 求最大值 print(np.max(arr)) # 6 print(np.argmax(arr)) # 5 # 最大值的索引(一维数组) # 求最小值 print(np.min(arr)) # 1 print(np.argmin(arr)) # 0 # 最小值的索引(一维数组) # 累积和 print(np.cumsum(arr)) # [1 3 6 4 9 15] 3是前两项的和6是前三项的和以此类推 # 乘积 print(np.prod(arr)) # 720线性代数矩阵点积矩阵A第一行和矩阵B第一列相乘(1,2,3) x (7,9,11)1x72x93x1158新矩阵第一行第一列为58矩阵A第一行和矩阵B第二列相乘(1,2,3) x (9,10,12)1x92x103x1264新矩阵第一行第二列为64最终得到结果。a np.array([[1, 2, 3], [4, 5, 6]]) b np.array([[7, 8], [9, 10], [11, 12]]) print(a.dot(b)) # [[58 64] # [139 154]]行列式矩阵的行列式是一个可以从方形矩阵方阵计算出来的特别的数。注意是正方形矩阵。如果2x2的矩阵行列式计算公式为|A| 表示求A的行列式。如果是3x3矩阵行列式计算公式为如果是4x4矩阵这种展开方式为拉普拉斯展开a np.array([[1, 2], [3, 4]]) print(np.linalg.det(a)) # -2.0逆矩阵8 × (1/8) 11/8是倒数那类似的矩阵x逆矩阵1如A × A⁻¹ I (单位矩阵a np.array([[1, 2], [3, 4]]) a_inv np.linalg.inv(a) print(a_inv) # [[-2. 1. ] # [ 1.5 -0.5]] # 验证逆矩阵 print(a_inv.dot(a)) # [[ 1. 0. ] # [ 0. 1. ]]特征值和特征向量如图x2向量在矩阵A的变换下方向不变仅仅做了拉伸。而x1向量在矩阵A的变换下方向已经改变。我们把x2称为特征向量λ是特征值。其实我们探究的是什么向量能在矩阵A的变换下只做拉伸和压缩的变换而不设计旋转等其他类型的转换。如图2就是特征值(1,1)就是特征向量。a np.array([[1, 2], [3, 4]]) # 特征值和特征向量 eigvals, eigvecs np.linalg.eig(a) # 特征值: # [-0.37228132 5.37228132] print(特征值:\n, eigvals) print(特征向量:\n, eigvecs) # 特征向量: # [[-0.82456484 -0.41597356] # [ 0.56576746 -0.90937671]]线性方程组线性方程组的特点是没有平方、没有根号、没有相乘项xy 这种。# 解线性方程组 A*xb A np.array([[2, 1], [1, 2]]) b np.array([5, 7]) x np.linalg.solve(A, b) print(解线性方程组 A*xb:\n, x) # 解线性方程组 A*xb: # [1. 3.] # 验证 c np.array([1, 3]) print(np.dot(A, c)) # [5 7]统计函数基本统计方差的计算公式标准差计算公式方差和标准差观察数据的离散程度。均值-标准差包含68%的数据均值-2x标准差包含95%的数据均值-3x标准差包含99.7%的数据### 基本统计 data np.array([23, 45, 67, 89, 12, 34, 56, 78, 90, 11]) # 平均值 print(平均值:, np.mean(data)) # 平均值: 50.5 # 中位数 print( 中位数:, np.median(data), # 中位数: 50.5 ) # 从小到大排序后的中间值如果是偶数个中间2个数求平均 # 最大值 print(最大值:, np.max(data)) # 最大值: 90 # 最小值 print(最小值:, np.min(data)) # 最小值: 11 # 极差最大值-最小值 print(极差:, np.ptp(data)) # 极差: 79 # 百分位数 print(25百分位数:, np.percentile(data, 25)) # 25百分位数: 25.75 print(75百分位数:, np.percentile(data, 75)) # 75百分位数: 75.25 # 标准差 data2 np.array([2, 4, 6, 8, 10]) print(标准差:, np.std(data2)) # 标准差: 2.8284271247461903 # 方差 print(方差:, np.var(data2)) # 方差: 8.0相关性统计相关系数就是用来衡量两组数据之间线性关系有多强的一个数。取值永远在-1 ≤ r ≤ 1。r 1完全正相关你涨我也涨一模一样r -1完全负相关你涨我就跌完全相反r 0完全没关系各走各的假设有2个变量身高和体重协方差矩阵长这样相关系数矩阵长这样协方差计算公式相关系数计算公式###相关性统计 x np.array([1, 2, 3, 4, 5]) y np.array([2, 4, 5, 4, 5]) # 相关系数矩阵 print(相关系数矩阵:\n, np.corrcoef(x, y)) # 相关系数矩阵: # [[1. 0.77459667] # [0.77459667 1. ]] # 协方差矩阵 print(协方差矩阵:\n, np.cov(x, y)) # 默认样本协方差矩阵 # 协方差矩阵: # [[2.5 1.5] # [1.5 1.5]]随机数生成基本用法### 基本用法 # 设置随机种子种子一样随机数一样 np.random.seed(42) # 0-1之间的随机数 print(0-1之间的随机数:\n,np.random.rand()) # 0-1之间的随机数: # 0.3745401188473625 #生成随机数矩阵 arrnp.random.rand(3,3) print(随机矩阵:\n,arr) # 随机矩阵: # [[0.95071431 0.73199394 0.59865848] # [0.15601864 0.15599452 0.05808361] # [0.86617615 0.60111501 0.70807258]] #指定范围的随机整数 print(指定范围的随机整数:\n,np.random.randint(1,10)) # 指定范围的随机整数: # 6 print(生成3x3矩阵:\n,np.random.randint(1,10,size(3,3))) # 生成3x3矩阵: # [[5 2 8] # [6 2 5] # [1 6 9]] #标准正态分布均值为0标准差为1的正态分布随机数 print(标准正态分布:\n,np.random.randn(3,3)) # 标准正态分布: # [[ 0.81644508 -1.523876 -0.42804606] # [-0.74240684 -0.7033438 -2.13962066] # [-0.62947496 0.59772047 2.55948803]] #指定均值和标准差的正态分布随机数 print(指定均值和标准差的正态分布随机数:\n,np.random.normal(loc50,scale10,size100)) #从数组中随机选择 arrnp.array([1,2,3,4,5]) print(从数组中随机选择:\n,np.random.choice(arr,size3,replaceFalse)) # 随机选择3个数返回新数组不替换新数组 # 从数组中随机选择: # [1 3 2]常用分布均匀分布啥概率都一样平如掷骰子正态分布中间多两头少如身高二项分布做N次独立试验成功几次如抛硬币泊松分布一段时间内发生几次如1分钟内路过几辆车指数分布两次事件之间隔多久如电话两次响铃间隔###常用分布 # 均匀分布 uniform np.random.uniform(low0, high10, size1000) # 正态分布 normal np.random.normal(loc0, scale1, size1000) # 二项分布 binomial np.random.binomial(n10, p0.5, size1000) # 泊松分布 poisson np.random.poisson(lam5, size1000) # 指数分布 exponential np.random.exponential(scale1, size1000)随机打乱使用shuffle或permutation打算数组。shuffle返回视图permutation返回副本。###随机打乱 # 随机打乱数组 arr np.array([1, 2, 3, 4, 5]) np.random.shuffle(arr) # shuffle洗牌打乱,视图 print(随机打乱:, arr) # 返回打乱后的副本 arr2 np.array([1, 2, 3, 4, 5]) shuffled np.random.permutation(arr) # 副本 print(返回打乱后的副本:, shuffled) print(原数组:, arr2)