需要 numpy 库支持

保存链接

http://www.cnblogs.com/chamie/p/4870078.html

1.numpy的导入和使用

from numpy import *;#导入numpy的库函数
import numpy as np; #这个方式使用numpy的函数时,需要以np.开头。

2.矩阵的创建

由一维或二维数据创建矩阵

>>> from numpy import *
>>> a1=array([1,2,3])
>>> a1
array([1, 2, 3])
>>> a1=mat(a1)
>>> a1
matrix([[1, 2, 3]])
>>> shape(a1)
(1, 3)
>>> b=matrix([1,2,3])
>>> shape(b)
(1, 3)

创建常见的矩阵

>>>data1=mat(zeros((3,3))) #创建一个3*3的零矩阵,矩阵这里zeros函数的参数是一个tuple类型(3,3)
>>> data1
matrix([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>>data2=mat(ones((2,4))) #创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用dtype=int
>>> data2
matrix([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>>data3=mat(random.rand(2,2)) #这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个二维数组,需要将其转换成#matrix
>>> data3
matrix([[ 0.57341802, 0.51016034],
[ 0.56438599, 0.70515605]])
>>>data4=mat(random.randint(10,size=(3,3))) #生成一个3*3的0-10之间的随机整数矩阵,如果需要指定下界则可以多加一个参数
>>> data4
matrix([[9, 5, 6],
[3, 0, 4],
[6, 0, 7]])
>>>data5=mat(random.randint(2,8,size=(2,5))) #产生一个2-8之间的随机整数矩阵
>>> data5
matrix([[5, 4, 6, 3, 7],
[5, 3, 3, 4, 6]])
>>>data6=mat(eye(2,2,dtype=int)) #产生一个2*2的对角矩阵
>>> data6
matrix([[1, 0],
[0, 1]]) a1=[1,2,3]
a2=mat(diag(a1)) #生成一个对角线为1、2、3的对角矩阵
>>> a2
matrix([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])

3.常见的矩阵运算

1. 矩阵相乘

>>>a1=mat([1,2]);
>>>a2=mat([[1],[2]]);
>>>a3=a1*a2 #1*2的矩阵乘以2*1的矩阵,得到1*1的矩阵
>>> a3
matrix([[5]])

2. 矩阵点乘

矩阵对应元素相乘

>>>a1=mat([1,1]);
>>>a2=mat([2,2]);
>>>a3=multiply(a1,a2)
>>> a3
matrix([[2, 2]])

矩阵点乘

>>>a1=mat([2,2]);
>>>a2=a1*2>>>a2
matrix([[4, 4]])

3.矩阵求逆,转置 
矩阵求逆

>>>a1=mat(eye(2,2)*0.5)
>>> a1
matrix([[ 0.5, 0. ],
[ 0. , 0.5]])
>>>a2=a1.I #求矩阵matrix([[0.5,0],[0,0.5]])的逆矩阵
>>> a2
matrix([[ 2., 0.],
[ 0., 2.]])

矩阵转置

>>> a1=mat([[1,1],[0,0]])
>>> a1
matrix([[1, 1],
[0, 0]])
>>> a2=a1.T
>>> a2
matrix([[1, 0],
[1, 0]])

4.计算矩阵对应行列的最大、最小值、和。

3>>>a1=mat([[1,1],[2,3],[4,2]])
>>> a1
matrix([[1, 1],
        [2, 3],
        [4, 2]])

计算每一列、行的和

>>>a2=a1.sum(axis=0) #列和,这里得到的是1*2的矩阵
>>> a2
matrix([[7, 6]])
>>>a3=a1.sum(axis=1) #行和,这里得到的是3*1的矩阵
>>> a3
matrix([[2],
[5],
[6]])
>>>a4=sum(a1[1,:])  #计算第一行所有列的和,这里得到的是一个数值
>>> a4
5                    #第0行:1+1;第2行:2+3;第3行:4+2

计算最大、最小值和索引

>>>a1.max()   #计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
4
>>>a2=max(a1[:,1]) #计算第二列的最大值,这里得到的是一个1*1的矩阵
>>> a2
matrix([[3]])
>>>a1[1,:].max()  #计算第二行的最大值,这里得到的是一个一个数值
3
>>>np.max(a1,0)  #计算所有列的最大值,这里使用的是numpy中的max函数
matrix([[4, 3]])
>>>np.max(a1,1)  #计算所有行的最大值,这里得到是一个矩阵
matrix([[1],
        [3],
        [4]])
>>>np.argmax(a1,0) #计算所有列的最大值对应在该列中的索引
matrix([[2, 1]])
>>>np.argmax(a1[1,:])  #计算第二行中最大值对应在该行的索引
1

5.矩阵的分隔和合并 
矩阵的分隔,同列表和数组的分隔一致。

>>>a=mat(ones((3,3)))
>>> a
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>>b=a[1:,1:] #分割出第二行以后的行和第二列以后的列的所有元素
>>> b
matrix([[ 1., 1.],
[ 1., 1.]])

矩阵的合并

>>>a=mat(ones((2,2)))
>>> a
matrix([[ 1., 1.],
[ 1., 1.]])
>>>b=mat(eye(2))
>>> b
matrix([[ 1., 0.],
[ 0., 1.]])
>>>c=vstack((a,b)) #按列合并,即增加行数
>>> c
matrix([[ 1., 1.],
[ 1., 1.],
[ 1., 0.],
[ 0., 1.]])
>>>d=hstack((a,b)) #按行合并,即行数不变,扩展列数
>>> d
matrix([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]])

4.矩阵、列表、数组的转换

列表可以修改,并且列表中元素可以使不同类型的数据,如下:

l1=[[1],'hello',3];

numpy中数组,同一个数组中所有元素必须为同一个类型,有几个常见的属性:

>>>a=array([[2],[1]])
>>> a
array([[2],
[1]])
>>>dimension=a.ndim
>>> dimension
2
>>>m,n=a.shape
>>> m
2
>>> n
1
>>>number=a.size #元素总个数
>>> number
2
>>>str=a.dtype #元素的类型
>>> str
dtype('int64')

numpy中的矩阵也有与数组常见的几个属性。 
它们之间的转换:

>>>a1=[[1,2],[3,2],[5,2]]  #列表
>>> a1
[[1, 2], [3, 2], [5, 2]]
>>>a2=array(a1) #将列表转换成二维数组
>>> a2
array([[1, 2],
[3, 2],
[5, 2]])
>>>a3=mat(a1) #将列表转化成矩阵
>>> a3
matrix([[1, 2],
[3, 2],
[5, 2]])
>>>a4=array(a3) #将矩阵转换成数组
>>> a4
array([[1, 2],
[3, 2],
[5, 2]])
>>>a41=a3.getA() #将矩阵转换成数组
>>>a41
array([[1,2]
       [3,2]
       [5,2]])
>>>a5=a3.tolist() #将矩阵转换成列表
>>> a5
[[1, 2], [3, 2], [5, 2]]
>>>a6=a2.tolist() #将数组转换成列表
>>> a6
[[1, 2], [3, 2], [5, 2]]

这里可以发现三者之间的转换是非常简单的,这里需要注意的是,当列表是一维的时候,将它转换成数组和矩阵后,再通过tolist()转换成列表是不相同的,需要做一些小小的修改。如下:

>>>a1=[1,2,3]   #列表
>>>a2=array(a1)
>>> a2
array([1, 2, 3])
>>>a3=mat(a1)
>>> a3
matrix([[1, 2, 3]])
>>> a4=a2.tolist()
>>> a4
[1, 2, 3]
>>> a5=a3.tolist()
>>> a5
[[1, 2, 3]]
>>> a6=(a4==a5)
>>> a6
False
>>> a7=(a4 is a5[0])
>>> a7
True

矩阵转换成数值,存在以下一种情况:

>>> dataMat=mat([1])
>>> val=dataMat[0,0] #这个时候获取的就是矩阵的元素的数值,而不再是矩阵的类型
>>> val
1
 

Python学习笔记5 【转载】基本矩阵运算_20170618的更多相关文章

  1. Python学习笔记——Day5(转载)

    python 编码转换 主要介绍了python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换. 常见的编码转换分为以下几种情 ...

  2. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  3. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  4. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  5. python 学习笔记 13 -- 经常使用的时间模块之time

    Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...

  6. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  7. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  8. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  9. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  10. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

随机推荐

  1. Gaussian field consensus论文解读及MATLAB实现

    Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...

  2. elementui入门以及nodeJS环境搭建

    1. ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的, 所以饿了吗推出了基于VUE2.0的组件库,它的名 ...

  3. AcWing 33. 链表中倒数第k个节点

    习题地址 https://www.acwing.com/solution/acwing/content/2997/ 题目描述输入一个链表,输出该链表中倒数第k个结点. 注意: k >= 0;如果 ...

  4. html和css常见问题解答

    1. 详细描述层叠和继承的概念. 元素内嵌样式(用元素的全局属性style定义的样式) 文档内嵌样式(定义在style元素中的样式) 外部样式(用link元素导入的样式) 用户样式(用户定义的样式) ...

  5. 描述符(__get__和__set__和__delete__)

    目录 一.描述符 二.描述符的作用 2.1 何时,何地,会触发这三个方法的执行 三.两种描述符 3.1 数据描述符 3.2 非数据描述符 四.描述符注意事项 五.使用描述符 5.1 牛刀小试 5.2 ...

  6. matlab中的colormap

    matlab colormaps 默认颜色图是 parula ,颜色图从左往右数值不断增大. 颜色图名称 色阶 parula jet hsv hot cool spring summer autumn ...

  7. HTML连载46-浮动元素字围现象、浮动练习

    一.浮动元素的字围现象 div{ float:left; width:100px; height:100px; background-color: red; border:1px solid blac ...

  8. Saiku默认给数据类型的数据添加小数点问题处理(三十一)

    Saiku默认给数据类型的数据添加小数点问题处理 不知道大家有没有遇到过saiku定义的维度信息,数据类型时 展示出来的数据会自动加上 .0的后缀. 比如我定义了一个维度为 年, 在数据库中为 int ...

  9. laravel集成workerman,使用异步mysql,redis组件时,报错EventBaseConfig::FEATURE_FDS not supported on Windows

    由于laravel项目中集成了workerman,因业务需要,需要使用异步的mysql和redis组件. composer require react/mysql composer require c ...

  10. java 连缀用法

    连缀用法,即是在实例化对象时,同时为对象的属性设值. 如示例所示,在创建对象时,同时调用属性的设值函数,为属性赋值 Apple apple = new Apple() .setColor(" ...