原文链接:https://blog.csdn.net/m0_37393514/article/details/81273363
这一个博客主要是整理所有的关于矩阵还是数组的乘法的细节。
代码:
你需要在下面的代码里面主要到这些点:
(1):np.dot()如果碰到的是秩为1的数组,那么执行的是对应位置的元素相乘再相加;如果遇到的是秩不为1的数组,那么执行的是矩阵相乘。但是需要注意的是矩阵与矩阵相乘是秩为2,矩阵和向量相乘秩为1。
(2):np.multiply()表示的是数组和矩阵对应位置相乘,输出和输出的结果shape一致。
(3):np.outer()表示的是两个向量相乘,拿第一个向量的元素分别与第二个向量所有元素相乘得到结果的一行。
(4):*对数组执行的是对应位置相乘,对矩阵执行的是矩阵相乘。
-
import numpy
as np
-
-
print(
"下面我们将讨论一些关于一维数组的乘法的问题")
-
A=np.array([
1,
2,
3])
-
B=np.array([
2,
3,
4])
-
c=[
1,
2,
3]
-
print(
"*:",A*B)
#对数组执行的是对应位置元素相乘
-
print(
"np.dot():",np.dot(A,B))
#当dot遇到佚为1,执行按位乘并相加
-
print(
"np.multiply():",np.multiply(A,B))
#对数组执行的是对应位置的元素相乘
-
print(
"np.outer():",np.outer(A,B))
#A的一个元素和B的元素相乘的到结果的一行
-
-
print(
"下面我们将讨论一些关于二维数组和二位数组的乘法的问题")
-
a=np.array([[
1,
2,
3],[
3,
4,
5]])
-
b=np.array([[
1,
1],[
2,
2],[
3,
3]])
-
c=np.array([[
2,
2,
2],[
3,
3,
3]])
-
#出错:维度不对应:print("*:",a*b)
-
print(
"*:",a*c)
#*对数组执行的是对应位置相乘
-
print(
"np.dot():",np.dot(a,b))
#当dot遇到佚不为1执行矩阵的乘法(2,3)×(3,2)=(2,2)
-
#出错,维度不对应:print("np.multiply():",np.multiply(a,b))
-
print(
"np.multiply():",np.multiply(a,c))
#数组或者矩阵对应位置元素相乘,返回的是与原数组或者矩阵的大小一致
-
-
print(
"下面我们将讨论一些关于矩阵的乘法的问题")
-
A=np.mat([[
1,
2,
3],[
3,
4,
5]])
-
B=np.mat([[
1,
1],[
2,
2],[
3,
3]])
-
C=np.mat([[
2,
2,
2],[
3,
3,
3]])
-
D=[
1,
2,
3]
-
print(
"*:",A*B)
#*对矩阵执行的是矩阵相乘
-
print(
"np.dot():",np.dot(A,B))
#dot对矩阵执行的是矩阵相乘
-
print(
"np.dot():",np.dot(A,D))
-
#这里可以看出矩阵和矩阵的相相乘是轶为2的,所以是执行的矩阵乘法,但是矩阵和向量相乘是轶为1的,执行的是对应相乘加和
-
print(
"np.multiply():",np.multiply(A,C))
#multiply执行的是矩阵对应元素相乘
-
结果:
-
下面我们将讨论一些关于一维数组的乘法的问题
-
*:
[ 2 6 12]
-
np
.dot(): 20
-
np
.multiply():
[ 2 6 12]
-
np
.outer():
[[ 2 3 4]
-
[ 4 6 8]
-
[ 6 9 12]]
-
下面我们将讨论一些关于二维数组和二位数组的乘法的问题
-
*:
[[ 2 4 6]
-
[ 9 12 15]]
-
np
.dot():
[[14 14]
-
[26 26]]
-
np
.multiply():
[[ 2 4 6]
-
[ 9 12 15]]
-
下面我们将讨论一些关于矩阵的乘法的问题
-
*:
[[14 14]
-
[26 26]]
-
np
.dot():
[[14 14]
-
[26 26]]
-
np
.dot():
[[14 26]]
-
np
.multiply():
[[ 2 4 6]
-
[ 9 12 15]]