1、SciPy
Numpy提供了高性能的多维数组,以及计算和操作数组的基本工具。SciPy基于Numpy,提供了大量的计算和操作数组的函数,这些函数对于不同工作类型的开发人员非常有用。
Scipy是一个用于数学、科学、工程领域的常用Python第三方包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
Scipy是由针对特定任务的子模块组成,模块名称和应用领域如下:
scipy.cluster 向量计算/Kmeans
scipy.constants 物理和数学常量
scipy.fftpack 傅立叶变换
scipy.integrate 积分程序
scipy.interpolate 插值
scipy.io 数据输入输出
scipy.linalg 线性代数程序
scipy.ndimage n维图像包
scipy.odr 正交距离回归
scipy.optimize 优化
scipy.signal 信号处理
scipy.sparse 稀疏矩阵
scipy.spatial 空间数据结构和算法
scipy.special 一些特殊的数学函数
scipy.stats 统计
每一个模块都值得学习了解,这里只介绍个人用过的,比较简单的方法。
SciPy之图像操作
SciPy提供了一些操作图像的基本函数。比如,它提供了将图像从硬盘读入到数组的函数,也提供了将数组中数据写入的硬盘成为图像的函数。下面是一个简单的例子:
from scipy.misc import imread, imsave, imresize
# Read an JPEG image into a numpy array
img = imread('./cat.jpg')
print img.dtype, img.shape # Prints "uint8 (400, 248, 3)"
# We can tint the image by scaling each of the color channels
# by a different scalar constant. The image has shape (400, 248, 3);
# we multiply it by the array [1, 0.95, 0.9] of shape (3,);
# numpy broadcasting means that this leaves the red channel unchanged,
# and multiplies the green and blue channels by 0.95 and 0.9
# respectively.
img_tinted = img * [1, 0.95, 0.9]
# Resize the tinted image to be 300 by 300 pixels.
img_tinted = imresize(img_tinted, (300, 300))
# Write the tinted image back to disk
imsave('./cat_tinted.jpg', img_tinted)
SciPy之点之间的距离
SciPy定义了一些有用的函数,可以计算集合中点之间的距离。函数scipy.spatial.distance.pdist能够计算集合中所有两点之间的距离:
import numpy as np
from scipy.spatial.distance import pdist, squareform
# Create the following array where each row is a point in 2D space:
# [[0 1]
# [1 0]
# [2 0]]
x = np.array([[0, 1], [1, 0], [2, 0]])
print x
# Compute the Euclidean distance between all rows of x.
# d[i, j] is the Euclidean distance between x[i, :] and x[j, :],
# and d is the following array:
# [[ 0. 1.41421356 2.23606798]
# [ 1.41421356 0. 1. ]
# [ 2.23606798 1. 0. ]]
d = squareform(pdist(x, 'euclidean'))
prin)
函数scipy.spatial.distance.cdist可以计算不同集合中点的距离。大家自己学习下。
scipy之文件读写:scipy.io
加载和保存matlab文件
from scipy import io as spio
from numpy as np
x = np.ones((3,3))
spio.savemat('f.mat',{'a':a})
data = spio.loadmat('f.mat',struct_as_record=True)
data['a']
scipy之线性代数计算方法:scipy.linalg
- scipy.linalg.det():计算方阵的行列式
- scipy.linalg.inv():计算方阵的逆
- scipy.linalg.svd():奇异值分解
scipy之快速傅立叶变换:scipy.fftpack
scipy.fftpack使用:
- scipy.fftpack.fftfreq():生成样本序列
- scipy.fftpack.fft():计算快速傅立叶变换
scipy之优化:scipy.optimize
- scipy.optimize模块提供了函数求最值、曲线拟合和求根的函数。
- optimize.fmin_bfgs(function,0):非凸优化问题,对于这类函数的最小值计算问题一般是从给定的初始值开始进行一个梯度下降,在optimize中一般使用拟牛顿算法bfgs算法。
- optimize.fminbound(function,a,b):可以使用scipy.optimize.fminbound(function,a,b)得到指定范围([a,b])内的局部最低点。
- scipy.optimize.fsolve(function,x):函数可以求解f=0的零点,x是根据函数图形特征预先估计的一个零点。
- scipy.optimize.curve_fit():非线性最小二乘拟合
- scipy.optimize.leatsq():最小二乘法拟合
进一步深入学习的话最好阅读Scipy官方文档。