![cover](https://img-blog.csdnimg.cn/img_convert/b74c7b2e91aa412ba2986c9f070feb28.png)
scipy学习
不同的插值方法得到的值不一样。在径向基函数的插值中,径向基函数是一个对应于固定参考点定义的函数。方程的根:numpy能找到多项式和线性方程的根,但是找不到非线性方程的根。查看一组数据的数值摘要,可以使用describe(),返回观测值数量、最值、平均值、方差、偏度等等。公制长度、二进制、质量、角度、时间、压力、面积、体积、速度、温度、能量、功率、力。优化函数:机器学习中所有算法就是复杂的方程,需要
常量
from scipy import constants
print(dir(constants))
# ['Avogadro', 'Boltzmann', 'Btu', 'Btu_IT', 'Btu_th', 'ConstantWarning', 'G', 'Julian_year', 'N_A', 'Planck', 'R', 'Rydberg', 'Stefan_Boltzmann', 'Wien', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_codata', '_constants', '_obsolete_constants', 'acre', 'alpha', 'angstrom', 'arcmin', 'arcminute', 'arcsec', 'arcsecond', 'astronomical_unit', 'atm', 'atmosphere', 'atomic_mass', 'atto', 'au', 'bar', 'barrel', 'bbl', 'blob', 'c', 'calorie', 'calorie_IT', 'calorie_th', 'carat', 'centi', 'codata', 'constants', 'convert_temperature', 'day', 'deci', 'degree', 'degree_Fahrenheit', 'deka', 'dyn', 'dyne', 'e', 'eV', 'electron_mass', 'electron_volt', 'elementary_charge', 'epsilon_0', 'erg', 'exa', 'exbi', 'femto', 'fermi', 'find', 'fine_structure', 'fluid_ounce', 'fluid_ounce_US', 'fluid_ounce_imp', 'foot', 'g', 'gallon', 'gallon_US', 'gallon_imp', 'gas_constant', 'gibi', 'giga', 'golden', 'golden_ratio', 'grain', 'gram', 'gravitational_constant', 'h', 'hbar', 'hectare', 'hecto', 'horsepower', 'hour', 'hp', 'inch', 'k', 'kgf', 'kibi', 'kilo', 'kilogram_force', 'kmh', 'knot', 'lambda2nu', 'lb', 'lbf', 'light_year', 'liter', 'litre', 'long_ton', 'm_e', 'm_n', 'm_p', 'm_u', 'mach', 'mebi', 'mega', 'metric_ton', 'micro', 'micron', 'mil', 'mile', 'milli', 'minute', 'mmHg', 'mph', 'mu_0', 'nano', 'nautical_mile', 'neutron_mass', 'nu2lambda', 'ounce', 'oz', 'parsec', 'pebi', 'peta', 'physical_constants', 'pi', 'pico', 'point', 'pound', 'pound_force', 'precision', 'proton_mass', 'psi', 'pt', 'short_ton', 'sigma', 'slinch', 'slug', 'speed_of_light', 'speed_of_sound', 'stone', 'survey_foot', 'survey_mile', 'tebi', 'tera', 'test', 'ton_TNT', 'torr', 'troy_ounce', 'troy_pound', 'u', 'unit', 'value', 'week', 'yard', 'year', 'yobi', 'yocto', 'yotta', 'zebi', 'zepto', 'zero_Celsius', 'zetta']
单位类别
公制长度、二进制、质量、角度、时间、压力、面积、体积、速度、温度、能量、功率、力
公制长度
# 以m为单位
print(constants.kilo) # 1000.0
print(constants.micro) # 1e-06
二进制
# 以Byte为单位
print(constants.kibi) # 1024
质量
# 以kg为单位
print(constants.gram) # 0.001
print(constants.metric_ton) # 1000.0
角度
# 以弧度为单位
print(constants.degree) # 0.017453292519943295
时间
# 以s为单位
print(constants.hour) # 3600.0
压力
# 以Pa为单位
print(constants.atmosphere) # 101325.0
面积
# 以平方米为单位
print(constants.acre) # 4046.8564223999992
体积
# 以弧度为单位
print(constants.degree) # 0.017453292519943295
优化器
可以找到函数最小值,或找到方程的根
优化函数:机器学习中所有算法就是复杂的方程,需要在给定数据的帮助下将其最小化
方程的根:numpy能找到多项式和线性方程的根,但是找不到非线性方程的根。因此需要使用scipy的optimze.root函数
from scipy.optimize import root
from math import cos
myroot = root(lambda x: x+cos(x), 0) # parm1 待求函数;parm2 根的初始猜测
print(myroot)
"""
fjac: array([[-1.]])
fun: array([0.])
message: 'The solution converged.'
nfev: 9
qtf: array([-2.66786593e-13])
r: array([-1.67361202])
status: 1
success: True
x: array([-0.73908513])
"""
函数最小值:使用scipy的optimze.minimize函数
minimize(fun, x0, method, callback)
x0: 根的初始猜测
method: 要使用的方法名称
{'CG', 'BFGS', '牛顿-CG', 'TNC', 'COBYLA', 'SLSQP', 'L-BFGS-B'}
callback: 每次优化迭代后调用的函数
options: 额外参数
稀疏矩阵
线代中处理偏导会用到稀疏矩阵
sparse用来处理稀疏矩阵
稀疏矩阵类型:
- CSC 压缩列
- CSR 压缩行
CSR稀疏矩阵
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0,0,0],[0,0,1],[1,0,2]])
print(csr_matrix(arr).count_nonzero()) # 3
print(csr_matrix(arr).eliminate_zeros()) # (1, 2) 1 (2,0) 1 (2,2) 2 消除矩阵0项
print(csr_matrix(arr).tocsc()) # 转成csc
图
sparse.csgraph用来处理图
连通区域
用connected_components找到所有连通区域
import numpy as np
from scipy.sparse import csr_matrix
form scipy.sparse.csgraph import connected_components
arr = np.arr([[0,1,2], [1,0,0], [2,0,0]])
"""
二叉树图:
[A]
1 2
[B] [C]
"""
graph = csr_matrix(arr)
print(connected_components(graph)) # (1, [0, 0, 0]) 一个连通区域,三个元素都是一维
dijkstra
从图中找两个元素的最短路径
from scipy.sparse.csgraph import dijkstra
print(dijkstra(graph, indices=0)) # indices: 元素索引 [0. 1. 2.] 第0个元素到第1个元素距离为1
floyd
从图中找两个元素的最短路径
from scipy.sparse.csgraph import floyd_warshall
print(floyd_warshall(graph))
"""
[[0. 1. 2.]
[1. 0. 3.]
[2. 3. 0.]]
"""
bellman
从图中找两个元素的最短路径,且可以处理负权重
from scipy.sparse.csgraph import bellman_ford
print(bellman_ford(graph, indices=0)) # indices: 元素索引 [0. 1. 2.] 第0个元素到第1个元素距离为1
深度优先
返回一个节点的深度优先遍历
from scipy.sparse.csgraph import depth_first_order
print(depth_first_order(graph, 0)) # indices: 遍历起始元素 [0, 1, 2], [-9999, 0, 0]
广度优先
返回一个节点的广度优先遍历
from scipy.sparse.csgraph import breadth_first_order
print(breadth_first_order(graph, 0)) # indices: 遍历起始元素 [0, 1, 2], [-9999, 0, 0]
空间数据
spatial模块,处理几何空间中表示的数据
三角测量
将多边形划分为多个三角形,再求其面积之和
from scipy.spatial import Delaunay
points = np.array([[2,4], [3,4], [3,0], [2,2], [4,1]])
simplices = Delaunay(points).simplices
print(simplices)
"""
三角形顶点索引
[[3 2 4]
[3 1 0]
[1 3 4]]
"""
凸面体
可以求到覆盖所有给定点的最小的平面多边形
from scipy.spatial import ConvexHull
hull = ConvexHull(points)
KDTree
是为最近的邻居查询而优化的数据结构
在点集中,使用KDTree可以查询在平面上到哪些点距离某给定点最近
kdtree = KDTree(points)
print(kdtree.query(1,1)) # 查询点集里到(1,1)最近的点
MATLAB
scipy.io模块可以与matlab一起工作
savemat()/loadmat()可以以matlab格式导出/导入数据
io.savemat(file_name, {"vec": arr})
data = io.loadmat(file_name, squeeze_me=True)
插值法
是在给定点之间生成点的方法,interpolate模块
在机器学习中常用来处理数据集中缺失的数据,或是需要得到平滑数据集的情况
一维插值
from scipy.interpolate import interp1d
import numpy as np
xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1
interp_func = interp1d(xs, ys)
zs = np.arange(2.1, 3, 0.1)
new_arr = interp_func(zs)
# 由[2.1 2.2 2.3 ...] 变成了 [6.33 6.75 7.17 ...]
不同的插值方法得到的值不一样。在一维插值中,点被拟合为一条曲线;在样条插值中,点被拟合为由多项式定义的片状函数;在径向基函数的插值中,径向基函数是一个对应于固定参考点定义的函数
假设检验
stats模块,用于执行统计学意义的测试
T检验:用于确定两个变量平均值之间是否存在明显差异,并知道是否属于同一分布。是双尾检验
KS测试:用于检查给定值是否遵循分布
数据统计描述
查看一组数据的数值摘要,可以使用describe(),返回观测值数量、最值、平均值、方差、偏度等等
更多推荐
所有评论(0)