numpy * dot multiply

原创 2016年08月30日 16:06:06

有一点建议:当我们需要在python中进行像matlab中的矩阵运算时,最好将ndarray转化成matrix,以免出错

  • *
    需要记住的是: numpy arrays consistently abide by the rule that operations are applied element-wise. Thus, if a and b are numpy arrays, then a*b is the array formed by multiplying the components element-wise。
    即,对于ndarray, * 表示的是multiplying the components element-wise 必要时需要广播,举例:
>>> import numpy as np
>>> a = np.array(range(6)).reshape((2,3))                                                                                                                                                                     
>>> b = np.array([1,0,1])
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> b
array([1, 0, 1])
>>> c= a*b
>>> c
array([[0, 0, 2],
       [3, 0, 5]])
>>> d = a*b.T
>>> d
array([[0, 0, 2],
       [3, 0, 5]])
#按照广播规则进行广播,再进行multiplying the components element-wise

而对于matrix,* 则表示矩阵相乘,运算必须保证矩阵相乘的法则:

>>> A=np.matrix(a)
>>> B=np.matrix(b)
>>> A
matrix([[0, 1, 2],
        [3, 4, 5]])
>>> B
matrix([[1, 0, 1]])
>>> C=A*B
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 341, in __mul__
    return N.dot(self, asmatrix(other))
ValueError: objects are not aligned
# 必须遵守矩阵相乘的法则
>>> C=A*B.T
>>> C
matrix([[2],
        [8]])

  • np.dot
    官方文档:Dot product of two arrays.
    For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors (without complex conjugation). For N dimensions it is a sum product over the last axis of a and the second-to-last of b

所以对于ndarray ,一般情况下,都是进行矩阵乘法或者向量的内积运算。但这仅仅是等价于矩阵相乘,但等于就是矩阵相乘。对于ndarray,有时,dot的运算并不要求操作数像矩阵相乘的要求那么严格,当然相乘的结果的格式也不是矩阵,而是数组,举例:

>>> np.dot(a,b)
array([2, 8]) # a 2-D数组, b 1-D数组,不论b是否转置,得到的都得到相同的1-D数组
>>> np.dot(a,b.T)
array([2, 8])

但是对于matrix,矩阵相乘就是矩阵相乘,铁板丁丁,所以必须满足矩阵相乘的条件,举例:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: objects are not aligned
>>> np.dot(A,B.T)
matrix([[2],
        [8]])
# 必须遵守矩阵相乘的法则, 相乘的结果也保证了格式还是矩阵

1. 总之, Matrix是Array的一个小的分支,包含于Array。
2. 所以matrix 拥有array的所有特性。对于2-D数组,dot等价与矩阵相乘
3. 对于matrix,* 和 dot都表示矩阵相乘,必须遵守矩阵相乘法则


  • multiply
    multiply是numpy的ufunc函数,执行方法是对应元素相乘,而不是线性代数中的矩阵运算方式,类似于matlab中的点乘,当矩阵的维度不相同时,会根据一定的广播规则将维数扩充到一致的形式. 如果不能广播相同的size,multiply就会失败,举例:
>>> np.multiply(a,b)                                                                                                                                                                                          
array([[0, 0, 2],
       [3, 0, 5]])
>>> np.multiply(a,b.T)
array([[0, 0, 2],
       [3, 0, 5]])
>>> np.multiply(A,B)                                                                                                                                                                                          
matrix([[0, 0, 2],
        [3, 0, 5]])
>>> np.multiply(A,B.T)                                                                                                                                                                                        
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,3) (3,1) 
版权声明:本文为博主原创文章,未经博主允许不得转载。

numpy中关于*和dot的区别

numpy数组计算中*和dot是有很大区别的 1.
  • liugan5371375
  • liugan5371375
  • 2014年09月11日 22:27
  • 26318

numpy中的 dot, outer and *

每次用到都得先测试一下,整理一下以后会方便一些,先举几个例子吧:demo1:import numpy as np a = [[1,2,3],[4,5,6]] a = np.array(a) b = [...
  • zjm750617105
  • zjm750617105
  • 2016年11月25日 22:17
  • 6073

Python numpy函数:dot()

dot()函数是矩阵乘,而*则表示逐个元素相乘 一、dot():
  • qq_28618765
  • qq_28618765
  • 2017年09月25日 11:14
  • 1117

numpy中的dot()函数

一开始看到这个函数的时候,总是把它想成点积,因为dot是点的意思。。。后来在经历了dot()和*完全搞混,犯下错误之后,才终于弄明白了。dot()计算的事我们经常计算的矩阵乘法,设A(2 * 3), ...
  • qq_25436597
  • qq_25436597
  • 2017年12月19日 09:22
  • 98

numpy中关于*和dot的区别

numpy数组计算中*和dot是有很大区别的 1.numpy乘法运算中"*"是数组元素逐个计算具体代码如下: 2.numpy乘法运算中dot是按照矩阵乘法的规则来运算的具体...
  • IAlexanderI
  • IAlexanderI
  • 2017年06月30日 10:44
  • 571

numpy.dot()函数用法

今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题。就是dot函数是如何对矩阵进行运算的。 一、dot()的使用 参考文档:https://docs.scipy.org/d...
  • u012149181
  • u012149181
  • 2017年12月27日 16:11
  • 135

numpy中multiply函数怎么用

multiply(a,b)就是个乘法,如果a,b是两个数组,那么对应元素相乘 numpy.multiplynumpy.multiply(x1, x2[, out]) = Multiply arg...
  • qq_18433441
  • qq_18433441
  • 2017年02月05日 00:01
  • 9161

numpy multiply

numpy.multiply(x1, x2[, out]) : Multiply arguments element-wise, 广播法则。 numpy的multiply和*什么区别   Nump...
  • iamzhangzhuping
  • iamzhangzhuping
  • 2016年08月29日 22:25
  • 854

Numpy基础笔记

Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据...
  • hickai
  • hickai
  • 2014年04月11日 11:17
  • 52209

关于 numpy 中 multiply的用法

>>> import numpy as np >>> li = [1,2,3,4,5] >>> m1 = np.mat(li ) >>> m1 matrix([[1, 2, 3, 4, 5]]) >>...
  • u012300569
  • u012300569
  • 2014年08月10日 21:21
  • 1380
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:numpy * dot multiply
举报原因:
原因补充:

(最多只允许输入30个字)