import numpy as np ''' 数组基础操作 np.array() 创建数组 arr.shape 返回数组arr的size(行,列) arr.reshape(size) 改变数组的size, 元素个数要以一致 arr.dtype() 查看元素类型 dtype '''
import numpy as np from numpy.random import randn ''' 常用函数: np.arange(a,b,step=) 创建等差数组 np.sqrt(arr) 数组中的每个元素开方 np.exp(arr) 数组中的每个元素取e的指数 randn(size()) 随机产生size()的正态分布的数组 np.maximum(x,y) 每个元素取x,y中大者 np.where(cond,x,y) 三元表达式 x if cond else y '''
import numpy as np ''' 数学统计方法 sum 求和 mean 求平均数 std 标准差 var 方差 min,max 最小值、最大值 argmin、argmax 最小值、最大值的所以 cumsum 所有元素的累计和 cumprod 所有元素的累计积 '''
''' 布尔运算: 布尔值会被强制转换为1(True)、0(False) any: 用于测试数组中是否存在True all: 检测数组中元素是否都是True '''
''' 排序 sort: sort是在数组本身所处理,如原来数组还有用的话 则需要对数组复制保存 '''
''' 唯一化 unique(x) 计算x中唯一元素,并返回有序结果 intersect1d(x,y) 计算x,y的公共元素,并返回有序结果 union1d(x,y) 计算x,y的并集,并返回有序结果 in1d(x,y) x的元素是否包含于y,返回布尔型 setdiff1d(x,y) 集合的差,元素在中且不再y中 setxor1d(x,y) 集合的对称差,即元素在一个元素中但不同时在两个数组中 '''
''' 数组的文件 np.save('file_name',arr) 默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy的文件中的 np.load('file_name.npy') 读取文件中的数组 np.savez('file_name.npz',a=arr1,b=arr2,...) savez将多个文件压缩到一个文件夹中,将数组以关键字参数的 形式传入。加载。npz文件时,会得到一个类似字典的对象 '''
''' 读取文本文件 load.txt('file_name.txt',delimiter=',') 保存数组到文件中 savetxt('file_name',arr1) '''
''' 线性代数 矩阵乘法 矩阵分解 行列式 ... 矩阵乘法 dot(x,y) 矩阵x与矩阵y的乘机 x = np.array([[1,2,3],[4,5,6]]) y = np.array([[1,2],[3,4],[5,6]]) np.dot(x,y) 矩阵的转置: x.T x的转置 矩阵的逆: from numpy.linalg import inv,qr inv(x) x的逆 QR分解 q,r = qr(x) x的qr分解 总结 diag 以一位的形式返回方阵的对角线元素 或将一位数组转化为矩阵(非对角线元素为0) dot 矩阵乘法 trace 迹,对角线元素的和 det 矩阵的行列式 eig 特征值和特征向量 inv 逆 pinv Moore-Penrose伪逆 qr qr分解 svd svd分解 slove 解方程Ax=b lstsq 计算最小二乘解 '''
''' 随机数的生成 numpy.random 模块中的函数 seed 确定随机数生成器的种子 permutation 返回一个序列的随机排列或返回一个随机排序的范围 shuffle 对一个序列随机排序 rand 产生均匀分布的样本值 randint 从给定上下限范围中随机选取整数 randn 产生正态分布(平均值为0,标准差为1)的样本值,类似于matlab借口 binomial 产生二项分布样本值 normal 产生正态分布的样本值 beta 产生Beta分布的样本值 chisquare 产生卡方分布的样本值 gamma 产生Gamma分布的样本值 unifrom 产生均匀分布的样本值 '''
'*****************一个例子---随机漫步 python实现*******************'
import numpy as np
from numpy.random import randn
import random position = 0 walk = [position] steps = 1000 for i in range(steps): step = 1 if random.randint(0,1) else -1 position += step walk.append(position) 'numpy实现' nsteps = 1000 draws = np.random.randint(0,2,size=nsteps) steps = np.where(draws>0,1,-1) walks = steps.cumsum() print(walks.min()) print(walks.max()) n1 = (np.abs(walks)>=10).argmax() print(n1) '************一次模拟多个随机漫步*************' nwalks = 5000 nsteps = 1000 draws = np.random.randint(0,2,size=(nwalks,nsteps)) steps = np.where(draws>0,1,-1) walks = steps.cumsum(1) print(walks.max(),walks.min())
本文参考书籍《利用Python进行数据分析》