np.dot np.matmul np.mutiply @ *

np.dot np.matmul np.mutiply @ *

​ 我自己最近总是混淆这几个运算,今天做一个总结。

先导概念

标量

一个标量就是一个数

向量

向量可以看做标量的集合,可以通过标量在这个集合中的顺序进行索引

image-20210427095720172

矩阵

矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。

image-20210427100000026

张量

几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。

可以将任意一张彩色图片表示成一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。

点积

点积一般来讲也叫内积,数量积。但是点积和内积也是有一些差别的,想继续了解的可以去看下参考博客第三个,我在这里尝试做一个概括,内积是更一般意义上的点积,比如在一段区间内的积分其实就是在做内积。f * dx 并求和。
∫ a b f   d x \int_a^b {f} \,{\rm d}x abfdx
对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。

哈达玛积

Hadamard product(又称element-wise product):对应元素相乘,二者维数必须相同。

image-20210427103350568

几种操作的结果

NumPy ArrayNumPy MatrixNumPy Array Vector
np.multiply(A, B)Hadamard ProductHadamard ProductHadamard Product
np.dot(A, B)Matrix MultiplicationMatrix MultiplicationSum of Hadamard Product
A * BHadamard ProductMatrix MultiplicationHadamard Product
np.matmul(A, B)Matrix MultiplicationMatrix MultiplicationSum of Hadamard Product
A @ BMatrix MultiplicationMatrix MultiplicationSum of Hadamard Product

示例

mutiply and *

array
import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 1], [2, 2]])

c = np.multiply(A, B)
print(c)
[[1 2]
 [6 8]]
A * B
array([[1, 2],
       [6, 8]])
matrix
A = np.mat(A)
B = np.mat(B)
c = np.multiply(A,B)
print(c)
[[1 2]
 [6 8]]
A * B
matrix([[ 5,  5],
        [11, 11]])
vector
A = np.array([1, 2, 3, 4])
B = np.array([1, 1, 2, 2])

c = np.multiply(A,B)
print(c)
[1 2 6 8]
A * B
array([1, 2, 6, 8])

matmul and dot

array
import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 1], [2, 2]])

c = np.dot(A, B)
print(c)
[[ 5  5]
 [11 11]]
np.matmul(A, B)
array([[ 5,  5],
       [11, 11]])
A @ B
array([[ 5,  5],
       [11, 11]])
matrix
A = np.mat(A)
B = np.mat(B)
c = np.dot(A,B)
print(c)
[[ 5  5]
 [11 11]]
np.matmul(A, B)
matrix([[ 5,  5],
        [11, 11]])
A @ B
matrix([[ 5,  5],
        [11, 11]])
vector
A = np.array([1, 2, 3, 4])
B = np.array([1, 1, 2, 2])
c = np.dot(A,B)
print(c)
17
np.matmul(A, B)
17
A @ B
17

总结

当进行向量的内积运算时,可以通过np.dot()
当进行矩阵的乘法运算时,可以通过np.matmul()或者@
当进行标量的乘法运算时,可以通过np.multiply()或者*

参考博客

1.数学概念:张量、矩阵、叉乘、点乘

2.【python】np.dot()、np.multiply()、np.matmul()方法以及*和@运算符的用法总结

3.difference between dot product and inner product

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值