Scipy学习笔记 矩阵计算

Scipy学习笔记

非本人原创  原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html

1.逆矩阵的求解

>>>import scipy

>>>from scipy import linalg

>>>a=scipy.mat(‘[1 2 3;2 2 1;3 4 3]‘)

>>>b=linalg.inv(a)

>>>print b

输出结果

[[ 1.   3.  -2. ]
   [-1.5
-3.   2.5]
   [
1.   1.  -1.
]]

>>> a*b

输出结果
  matrix([[ 
1.00000000e+00, 
-4.44089210e-16,  -4.44089210e-16],
          [ 
0.00000000e+00,  
1.00000000e+00,  -2.22044605e-16],
         
[ -4.44089210e-16,  
0.00000000e+00,  
1.00000000e+00]])

2.求行列式的值

>>>
linalg.det(a)
  输出结果

1.9999999999999996

3.求a的模
 
>>>
linalg.norm(a)
  输出结果

7.5498344352707498

4.求超定方程的最小二乘解

>>> a=scipy.mat(‘[1
-1;-1 1;2 -2;-3 1]‘)
  >>>
a
  matrix([[ 1, -1],
       
[-1,  1],
       
[ 2, -2],
       
[-3,  1]])
  >>>
b=scipy.mat(‘[1;2;3;4]‘)
  >>>
b
  matrix([[1],
         
[2],
         
[3],
         
[4]])
  >>>
x,y,z,w=linalg.lstsq(a,b)

输出结果
  >>>
x                                                                                     #x为解

array([[-2.41666667],
       
 [-3.25     
]])
  >>>
y
  array([ 9.83333333])
  >>>
z
  2
  >>>
w
  array([ 4.56605495, 
1.07291295])

5.求特征值及特征向量 
 
>>> a=scipy.mat(‘[-1 1
0;-4 3 0;1 0 2]‘)
  >>>
a
  matrix([[-1, 
1,  0],
         
[-4,  3,  0],
         
[ 1,  0,  2]])
  >>>
x,y=linalg.eig(a)

输出结果
  >>>
x                                                                                 #x为特征值

array([ 2.+0.j, 
1.+0.j,  1.+0.j])
  >>>
y                                                                               #y为特征向量

array([[
0.       
,  0.40824829, 
0.40824829],
        
[
0.       
,  0.81649658, 
0.81649658],
        
[
1.       
, -0.40824829, -0.40824829]])

6.LU分解

>>> a=scipy.mat(‘[1 2
3;0 1 2;2 4 1]‘)
  >>>
a
  matrix([[1, 2, 3],
         
[0, 1, 2],
        
 [2, 4, 1]])
  >>>
x,y,z=linalg.lu(a)

输出结果
  >>>
x
  array([[ 0., 
0.,  1.],
        
[ 0.,  1.,  0.],
        
[ 1.,  0.,  0.]])
 
>>> y                                                                                   #L矩阵

array([[ 1. , 
0. ,  0. ],
        
[ 0. ,  1. ,  0. ],
        
[ 0.5, -0. ,  1. ]])
 
>>> z                                                                                  
#U矩阵
  array([[ 2. ,  4.
,  1. ],
        
[ 0. ,  1. ,  2. ],
        
[ 0. ,  0. ,  2.5]])

7.Cholesky分解

>>> a=scipy.mat(‘[16 4
8;4 -5 4;8 -4 22]‘)
  >>>
a
  matrix([[16, 
4,  8],
         
[ 4, -5,  4],
         
[ 8, -4, 22]])
 
>>>linalg.cholesky(a)

输出结果
Traceback (most recent call last):
  File "<interactive
input>", line 1, in
<module>
  File
"D:\Python26\lib\site-packages\scipy\linalg\decomp_cholesky.py",
line 66, in cholesky
    c, lower =
_cholesky(a, lower=lower, overwrite_a=overwrite_a,
clean=True)
  File
"D:\Python26\lib\site-packages\scipy\linalg\decomp_cholesky.py",
line 24, in _cholesky
    raise
LinAlgError("%d-th leading minor not positive definite" %
info)
LinAlgError: 2-th leading minor not positive definite

8.求解线性方程组

>>> a=scipy.mat(‘[2 1
-5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6]‘)
  >>>
a
  matrix([[ 2,  1,
-5,  1],
       
  [ 1, -3,  0, -6],
       
  [ 0,  2, -1, 
2],
       
  [ 1,  4, -7, 
6]])
  >>>
b=scipy.mat(‘[8;9;-5;0]‘)
  >>>
b
  matrix([[ 8],
         
[ 9],
         
[-5],
         
[ 0]])
  >>>
linalg.solve(a,b)

输出结果
  array([[ 3.],
        
[-4.],
        
[-1.],
        
[ 1.]])

学习总结:

求逆矩阵:linalg.inv(*)

求行列式的值:linalg.det(*)

求模:linalg.norm(*)

求超定方程的最小二乘解:x,y,z=linalg.lstsq(a,b) #x为解

求特征值和特征向量:x,y=linalg.eig(a,b)  #x为特征值
y为特征向量

求LU分解:x,y,z=linalg.lu(*)  #y为L分解 
z为U分解

求解线性方程组:linalg.solve(a,b)

求Cholesky分解:linalg.cholesky(a)

疑问:

求解Cholesky分解时的输出结果出错?

作者语:

《SciPy
Reference
Guide》对Scipy的学习很有帮助,但市场上还未出现其中文版。本人英文水平有限,且为非计算机专业,还望世外高人能指点下哪些章节比较实用,本人感激不尽。

时间: 2024-10-09 20:49:41

Scipy学习笔记 矩阵计算的相关文章

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记大纲

因为工作需要,开始了python的学习之旅.学习的主要内容包括python基础知识.python数据分析基础知识.numpy专题学习.基于python的机器学习算法实现. 下面是系列笔记的一个大纲,希望朋友们多提意见和建议. [一]python基础知识 python基础教程学习笔记---(1)基础语法 python基础教程学习笔记---(2)列表和元组 python基础教程学习笔记---(3)字符串 python基础教程学习笔记---(4)字典 python基础教程学习笔记---(5)条件.循环

python数据分析入门学习笔记儿

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分析相关python库的介绍(前言1~4摘抄自<利用python进行数据分析>) 1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘

Numpy学习笔记(二)

最近一直在学HTML5和CSS3,Numpy的东西都有些生疏,那本书是已经看完了的,紧跟着相关的代码也都敲了一遍,还是发现了一些问题,因为这样的学习方式,总感觉太被动,紧紧跟着示例代码,缺少了整体观,即使你现在问我Numpy可以处理什么问题,我还是回答不出.所以,有必要回头重来一遍,再一次审视代码背后的意义,写博客真的是一个很不错的方式,毕竟,如果你不懂,写出来的文字必然也是混乱的. 那,下面记录一下Numpy学习笔记(二) Example1 文件读写:数据不应该仅仅存在内存里,应该及时保存在硬

Python scikit-learn 学习笔记—环境篇

Python scikit-learn 学习笔记-环境篇 近来闲来无事,也面临毕业季.这段时间除了做毕业设计,和同学再多吃几顿饭玩玩游戏之外.剩下的时间浪费着实可惜.想着以后研究生还要读三年,不如现在多看看书或者别的资料.正逢最近参加阿里巴巴大数据比赛,趁机学了一阵Python 数据挖掘包scikit learn,估计以后说不定会用到,所以先行记录下来,分享给大家. 先说一下这段时间对sklearn的理解.这一个数据挖掘包给我最直观的感觉就是简易.这个挖掘包的一些算法核心编码部分是借鉴别的单独算

NumPy学习笔记 一

NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分析>第四版(华东师范大学数学系).<概率论与数理统计>(陈希孺,中科大出版).<概率论与数理统计>第二版(茆诗松.程依明等编).<组合最优化:理论与方法>(现代数学译丛23).笔记一主要记录NumPy&SciPy及相关软件的环境准备部分. NumPy的官方网站

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开