<Python> Numpy中的矩阵乘法问题
2017-07-27 22:48
531 查看
最近参加的一个Program,主题是生物识别,其中的PCA/LDA特征值提取部分需要大量用到线性代数矩阵论的知识,但是稍不注意numpy中的乘法规则就很容易得到错误的结果,最终导致后续结果的崩盘,尤其是较大规模的矩阵,更是很难发现错误。
Numpy中的矩阵乘法分为两大情况,
运行结果如下:
如果在
numpy.dot
numpy.matmul
现在可以在IDLE上验证结果:
可以看到两者的运行结果一致,都是矩阵的矢量积结果。
在IDLE中重新验证:
结果已经非常清晰了。
对于
Numpy中的矩阵乘法分为两大情况,
使用numpy.array和使用
numpy.matrix. Numpy确实重载了
*操作符,可以直接对
array或者
matrix对象进行乘法运算,但是在不同对象上,其意义是有区别的。
对于array对象
*(或者multiply)代表的是并不是矩阵的乘法规则,而是简单的数量积,即对应位置元素相乘后的积相加。
import numpy as np a=np.array([[1,2],[3,4]]) b=np.array([[4,3],[2,1]])
运行结果如下:
如果在
array对象上要进行严格的矩阵乘法,即矢量乘法,则必须使用.dot()或者.matmul()函数,两者是等效的,我们可以通过查阅官网文档得知。
numpy.dot
numpy.matmul
现在可以在IDLE上验证结果:
可以看到两者的运行结果一致,都是矩阵的矢量积结果。
对于matrix对象
对于matrix,情况就悄悄相反了。
*表示的是矢量积,如果希望以数量积方式运行,则必须使用
np.multiply函数。因为
*重载矩阵运算规则只限于
matrix对象。
在IDLE中重新验证:
结果已经非常清晰了。
总结一下:
对于array对象,
*和
np.multiply函数代表的是数量积,如果希望使用矩阵的乘法规则,则应该调用
np.dot和
np.matmul函数。
对于
matrix对象,
*直接代表了原生的矩阵乘法,而如果特殊情况下需要使用数量积,则应该使用
np.multiply函数。
相关文章推荐
- Python numpy 矩阵特殊加、乘法与循环优化
- Numpy中的数组<矩阵>
- (noip 模拟 Matrix)<逃避矩阵乘法的好方法#滑稽>
- PYTHON 3 爬虫出现<urlopen error no host given> 问题
- 关于用mapreduce做kmeans聚类以及python的numpy和list做矩阵、向量乘法的速度对比
- OpenCL案例研究之一<矩阵乘法>
- 为什么会出现Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 问题?
- 51nod oj 1137 1242 <结构体内重载运算符求矩阵乘法>
- Python读取.xml文件(<?xml version="1.0" encoding="UTF-16"?>)中文乱码问题解决
- 数据结构之(动态规划二)之<矩阵链乘法>
- 【详解】Python每小时脚本中---<取数据库函数>和<发邮件问题>
- Python numpy库中的array,list与矩阵的乘法,以及增添元素的方法
- 【DP】poj1651 <矩阵链乘法>
- 利用CUDA的矩阵乘法1 <利用 Kahan's Summation Formula 来提高CUDA 的浮点数运算精确度>
- python笔记 <记录一些比较杂的问题>
- 使用xml模板导出excel时遇到尖括号<>转义的问题解决
- Python基础<十七:XML解析>
- 几个页面的问题一起记录了/el表达式判断/<c:import>传值/BootstrapDialog.show关闭时刷新/
- 解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题
- WebBrowser加载一个URL被多次调用DocumentCompleted 的问题解决方案<转>