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

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.ndimagen维图像包
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 个重要特征,而其余特征则都是噪声或冗余特征。

 

 

转载于:https://www.cnblogs.com/huanjing/p/8627277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值