Python 中矩阵运算主要使用numpy库。NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数索引的元素表格(通常是元素是数字)。因此对于随机查找来说,比python自带的list快很多。

  在numpy里面通常使用两个变量:array和matrix。其实python标准类库中也有array,但是它的功能相对numpy的少很多,所以不用。matrix是array的分支,matrix可以看做二维的array,array可以是多维,matrix和array在很多时候都是通用的。官方建议如果两个都可以用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵。但是matrix的优势在于,它相对于array使用的符号更简洁一些。

矩阵和向量的创建

  a = np.array([2,4,5,6,7])

  如上创建了一个1*5的一行5列的array,这就相当于一个行向量(实际上不是,应该用np.array([[2,4,5,6,7]])创建)。
  m = np.matrix([[1,2,4,5,6],[5,6,8,9,4]])

  如上创建了一个2*5的matrix,这就是一个2*5的矩阵。

  另外矩阵还可以通过这个创建:
  m = np.mat([[1,2,4,5,6],[5,6,8,9,4]])

  mat和matrix的相关之处是,mat([])就等同于matrix([],copy=false),而matrix([])实际上默认copy=true。

  所以如果想引用一个矩阵,如m,可以使用a = mat(m),或者a = matrix(m,copy=false)。当然用[]列表来新创建一个矩阵的时候它们是完全一样的。

矩阵的转置

  m = m.transpose()

  m = m.T

  matrix和除一维外的array(甚至高维,尽管不清楚转置机制,但暂时用不上所以先不研究)可以通过这个两个进行转置(T和transpose不同点暂时不研究了)。

  但是一维的array,它不是矩阵,也不是向量,所以不能通过transpose来转置。

  因为在计算机里,二维和一维定义好以后就确定下来用几个索引标志来索引了。

  而向量从功能上来看,应该被看做1行或1列的矩阵,所以它应该是二维的。就是说我们索引它的某个元素,比如行向量a的第3个元素,我们应该用a[1][3],而不是a[3]。

  所以a = np.array([2,4,5,6,7])创建的其实啥也不是,像np.array([[2,4,5,6,7]])这样创建二维的才算真正意义上的行向量,也就能用transpose()来转置了。

  如果用a = np.array([2,4,5,6,7,1,3,8])创建了一行数组a,想变成向量,就用reshape()函数来将它变成二维的向量。

reshape()函数

  a = a.reshape([1,8])

  把a转换为了二维的1行8列的行向量,即使a原来是一维数组。
  a = a.reshape(8)

  这样就又转回了原来一维的8元素的数组。   

  甚至还可以a = a.reshape([2,2,2])

  变成了2*2*2的三维的立方阵。

  另外,如果赋值给一个新变量:

  b = a.reshape([2,2,2])

  a的shape没变,b是2*2*2的立方阵,而且它们共享内存,即a改变它的元素值,b也会改变。

矩阵乘法

  乘法有三种表达方式:*、dot()、multiply()

np.multiply()

  数组或矩阵的对应位置元素相乘。

np.dot()

  对于一维数组array,执行对应位置相乘,然后再求和;对于秩不为1的二维数组(array)、矩阵(matrix),执行矩阵乘法运算(超过二维的可以参考numpy库介绍)

乘法运算*

  对数组array执行对应位置元素相乘(相当于 np.multiply() 函数),对矩阵matrix执行矩阵乘法运算(相当于 np.dot() 函数)。就是multiply()和dot()的融合。

幂运算**

  相当于多个array或matrix执行*,即A**3=A*A*A。

总结

  multiply()全都是对应元素相乘;dot()是矩阵乘法,而一维array是对应元素相乘后之和;*对array是对应元素相乘,对matrix是矩阵乘法。

  相对来说matrix注重矩阵操作,array注重阵列操作(阵中元素对应进行运算)

Python 矩阵相关的更多相关文章

  1. Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2

    //2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...

  2. python数组相关知识

    1.np中的reshape函数,可以把矩阵重新划分成m行n列. arange(n)可以把 [0,n-1]装入数组中,一定要注意的是img.reshape()并不会改变原来的数组,所以需要另外新建一个数 ...

  3. python文件相关操作

    Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...

  4. Mac os 下 python爬虫相关的库和软件的安装

      由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装:   1. h ...

  5. Python内存相关

    Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...

  6. Python 矩阵(线性代数)

    Python 矩阵(线性代数) 这里有一份新手友好的线性代数笔记,是和深度学习花书配套,还被Ian Goodfellow老师翻了牌. 笔记来自巴黎高等师范学院的博士生Hadrien Jean,是针对& ...

  7. python 日期相关的各种操作总结

    用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的功能,动不动就要去查python手册,感觉麻烦,因此把自己常用的一些东西,总结了一下,总体说来到目前为止遇到如下一些需求: 1. 用 ...

  8. Python 异常相关参考

    Python所有的异常都是从BaseException类派生的,常见的错误类型和继承关系如下: BaseException +-- SystemExit +-- KeyboardInterrupt + ...

  9. Python编写相关注意事项

    1.# -*- coding: utf-8 -*-代码首部添加这个,不然会报Non_ASCII charater错误 python闭包:实际应用场景1.保持闭包运行完后的环境: 2.根据外部作用域的局 ...

随机推荐

  1. 树莓派Raspberry实践笔记—显示分辨率配置

    转载:http://www.cnblogs.com/atsats/p/6607886.html 如果未接显示设备,使用VNC登录后,显示分辨率很小,应该是480p,导致使用很不方便. 这里通过修改/b ...

  2. idea maven项目使用过程中遇到的问题

    1. Error:Cannot build Artifact :war exploded because it is included into a circular depency 参考: http ...

  3. 对list集合的内容分组

    /** * 把list集合里的内容按照len大小分组 * @param list * @param len * @return */ private static List<List<St ...

  4. centos7 ip配置及ssh服务连接

    一.配置ip /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33 这个是配置网卡的配置文件,名字可能不一样,大概为:ifcfg-网卡名 TYP ...

  5. 单链表 C++ 实现 - 含虚拟头节点

    本文例程下载链接:ListDemo 链表 vs 数组 链表和数组的最大区别在于链表不支持随机访问,不能像数组那样对任意一个(索引)位置的元素进行访问,而需要从头节点开始,一个一个往后访问直到查找到目标 ...

  6. windows破解wifi小技巧

    1,首先使用手机某软件破解wifi,手机连上破解的wifi 2,在手机上打开下面界面 3,在电脑上使用二维码识别小工具扫描二维码 4,得到扫面结果 4,得到扫描结果 WIFI:T:WPA;S:DFZJ ...

  7. SpringBoot与Jpa自定义增删查改

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. Kali中文乱码问题

    上面的是用网上介绍的安装组件无法安装,老是提示最后一句:Unable to locate package ...... 后来觉得应该是因为安装Kali时在最后有个选择更新系统的一个配置上,我选择了下面 ...

  9. 重新学习CSS,认识CSS3中的属性

    之前学css,觉得会改个样式就不错了,直到现在,在做前端开发的时候,才发现自己的前端页面是有多垃圾,而且还不知道该怎么适应各个浏览器,总是很“词穷”,最近是想着好久没去慕课上面了,于是就报着逛一逛的心 ...

  10. Spring Cloud 从入门到入门

    参考:https://blog.csdn.net/hellozpc/article/details/83692496 参考:https://www.fangzhipeng.com/spring-clo ...