numpy中的各种乘法
点乘,叉乘,内积,外积,数量积,向量积。
前言
做数字图像处理的时候会需要卷积,虽然 OpenCV 自带了对应的函数filter2D()
来进行卷积,
不过实验嘛,还是自己动手理解原理才是最好的。不过 numpy 的各种乘法混着看不懂有啥区别啊,所以就看看咯。
正文
下面我会把满足条件的方法合并起来演示。
点乘、内积、数量积
简单地说就是将数组 a 中的每个元素与数组 b 中的每一个对应位置的元素相乘,相乘的结果放在和数组 a 相同大小的数组中。
下面就用 python来演示下咯
array 与 array 求点乘
1 |
|
mat 与 mat 求点乘
1 |
|
mat 与 array 求点乘
1 |
|
叉乘、外积、向量积
array 与 array 求叉乘
1 |
|
mat 与 mat 求叉乘
1 |
|
mat 与 array 求叉乘
1 |
|
多说一句,这里的 mat 和 array 的顺序可以前后交换。
总结
目标\类型 | array 与 array | mat 与 mat | mat 与 array |
---|---|---|---|
点乘、内积、数量积 | a * b或者np.multiply(a,b) | np.multiply(a,b) | np.multiply(a,b) |
叉乘、外积、向量积 | np.dot(a,b) 或者 np.matmul(a,b) | a*b 或者 np.dot(a,b) 或者 np.matmul(a,b) | a*b 或者 np.dot(a,b) 或者 np.matmul(a,b) |
这个时候可以看到
- 在求点乘的情况下,除了 array 与 array 相乘可以用 a*b 其他类型都应该用 np.multiply(a,b)
- 在求叉积的情况下,除了 array 与 array 相乘不可以用 a*b 其他类型用几种乘法都可以。
求卷积
卷积就是求了点乘之后把矩阵求和,然后把这个和作为结果放入新的矩阵中。
array 与 array 求卷积
1 |
|
mat 与 mat 求卷积
1 |
|
mat 与 array 求卷积
1 |
|
参考
numpy中的各种乘法
https://www.yikakia.com/numpy中的各种乘法/