Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.5. Scipy : high-level scientific computing

Scipy Lecture Notes学习笔记(一)Getting started with Python for science 

1.5. Scipy : high-level scientific computing

scipy可以与其他标准科学计算库比较,例如GSL(用于C和C ++的GNU科学库)或Matlab的工具箱。scipy是Python中科学例程的核心软件包; 它意味着在numpy 阵列上高效运行,所以numpy和scipy可以携手共事。

在实现例程之前,需要检查Scipy中是否已经实现了所需的数据处理。作为非专业程序员,科学家往往倾向于重新发明轮子,这会导致错误的,非最优的,难以共享和不可维护的代码。相比之下,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 统计

 

 

1.5.1 文件输入/输出:scipy.io

Loading and saving 

输入:

from scipy import io as spio
a = np.ones((3, 3))
spio.savemat('file.mat', {'a': a}) # savemat expects a dictionary
data = spio.loadmat('file.mat')
data['a']

输出:

array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

读取图像

from scipy import misc
misc.imread('fname.png')    

# Matplotlib also has a similar function
import matplotlib.pyplot as plt
plt.imread('fname.png')   

1.5.3. Linear algebra operations: scipy.linalg

scipy.linalg.det()函数计算方阵的行列式:

输入:

from scipy import linalg
arr = np.array([[1, 2],
[3, 4]])
print(linalg.det(arr)) #计算方阵的行列式
iarr = linalg.inv(arr) #计算方阵的逆
arr = np.arange(9).reshape((3, 3)) + np.diag([1, 0, 1])
uarr, spec, vharr = linalg.svd(arr) #进行奇异值分解linalg.svd
#原始矩阵可以重新由通过的输出的矩阵乘法进行还原
sarr = np.diag(spec)
print(arr)
svd_mat = uarr.dot(sarr).dot(vharr)
print(np.allclose(svd_mat, arr)) #判断两个矩阵是否相等
print(svd_mat)

输出:

-2.0
[[1 1 2]
 [3 4 5]
 [6 7 9]]
True
[[1. 1. 2.]
 [3. 4. 5.]
 [6. 7. 9.]]

1.5.4. Interpolation: scipy.interpolate 插值

 

 

矩阵分解

  • 矩阵分解是将数据矩阵分解为多个独立部分的过程。
  • 矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式是两个或多个矩阵的乘积。(类似代数中的因数分解)
  • 举例:如何将12分解成两个数的乘积?(1,12)、(2,6)、(3,4)都是合理的答案。

SVD 是矩阵分解的一种类型,也是矩阵分解最常见的技术

  • SVD 将原始的数据集矩阵 Data 分解成三个矩阵 U、∑、V
  • 举例:如果原始矩阵 DatamnDatam∗n 是m行n列,
    • UmnUm∗n 表示m行n列
    • mk∑m∗k 表示m行k列
    • VknVk∗n 表示k行n列。

Datamn=UmkkkVkn

  • 上述分解中会构建出一个矩阵∑,该矩阵只有对角元素,其他元素均为0(近似于0)。另一个惯例就是,∑的对角元素是从大到小排列的。这些对角元素称为奇异值。
  • 奇异值与特征值(PCA 数据中重要特征)是有关系的。这里的奇异值就是矩阵 DataDataTData∗DataT 特征值的平方根。
  • 普遍的事实:在某个奇异值的数目(r 个=>奇异值的平方和累加到总值的90%以上)之后,其他的奇异值都置为0(近似于0)。这意味着数据集中仅有 r 个重要特征,而其余特征则都是噪声或冗余特征。

 

 

posted on 2018-03-22 22:15  海盗Ora  阅读(223)  评论(0编辑  收藏  举报

导航