numpy中array、matrix关于 * 、@、dot、multiply、ravel的异同
" * "的区别
// 创建二维array和matrix
a=np.array([[1,2]])
b=np.array([[1],[1]])
a1=np.matrix(a)
b1=np.matrix(b)
a: [[1 2]] a1: [[1 2]]
b: [[1] b1: [[1]
[1]] [1]]
print(a*b)
[[1 2]
[1 2]]
print(a1*b1)
[[3]]
// 创建一维array和matrix
c=np.array([1,1])
d=np.array([2,2])
c1=np.matrix(c)
d1=np.matrix(d)
c: [1 1] c1:[[1 1]]
d: [2 2] d1:[[2 2]]
print(c*d)
[2 2]
print(c1*d1) 报错,因为*对于matrix为矩阵相乘,c1、d1二矩阵无法做矩阵乘法
小结:* 对于array为对应位置相乘,对于matrix为矩阵乘法
"@"的区别
// 创建二维array和matrix
a=np.array([[1,2]])
b=np.array([[1],[1]])
a1=np.matrix(a)
b1=np.matrix(b)
a: [[1 2]] a1: [[1 2]]
b: [[1] b1: [[1]
[1]] [1]]
print(a@b)
[[3]]
print(a1@b1)
[[3]]
// 创建一维array和matrix
c=np.array([1,1])
d=np.array([2,2])
c1=np.matrix(c)
d1=np.matrix(d)
c: [1 1] c1:[[1 1]]
d: [2 2] d1:[[2 2]]
print(c@d)
4
print(c1@d1) 报错,因为@对于matrix为矩阵相乘,c1、d1二矩阵无法做矩阵乘法
小结:@ 对于二维array和matrix均为矩阵乘法,对于一维array为求内积
"dot"的区别
// 创建二维array和matrix
a=np.array([[1,2]])
b=np.array([[1],[1]])
a1=np.matrix(a)
b1=np.matrix(b)
a: [[1 2]] a1: [[1 2]]
b: [[1] b1: [[1]
[1]] [1]]
print(np.dot(a,b))
[[3]]
print(np.dot(a1,b1))
[[3]]
// 创建一维array和matrix
c=np.array([1,1])
d=np.array([2,2])
c1=np.matrix(c)
d1=np.matrix(d)
c: [1 1] c1:[[1 1]]
d: [2 2] d1:[[2 2]]
print(np.dot(c,d))
4
print(np.dot(c1,d1))报错,因为dot对于matrix为矩阵相乘,c1、d1二矩阵无法做矩阵乘法
小结:dot 对于二维array和matrix均为矩阵乘法,对于一维array为求内积
"multiply"的区别
// 创建二维array和matrix
a=np.array([[1,2]])
b=np.array([[1],[1]])
a1=np.matrix(a)
b1=np.matrix(b)
a: [[1 2]] a1: [[1 2]]
b: [[1] b1: [[1]
[1]] [1]]
print(np.multiply(a,b))
[[1 2]
[1 2]]
print(np.multiply(a1,b1))
[[1 2]
[1 2]]
// 创建一维array和matrix
c=np.array([1,1])
d=np.array([2,2])
c1=np.matrix(c)
d1=np.matrix(d)
c: [1 1] c1:[[1 1]]
d: [2 2] d1:[[2 2]]
print(np.multiply(c,d))
[2 2]
print(np.multiply(c1,d1))
[[2 2]]
小结:multiply 对于array和matrix均为对应位置相乘
"ravel"的区别
// 创建二维array和matrix
b=np.array([[1],[1]])
b1=np.matrix(b)
b: [[1] b1: [[1]
[1]] [1]]
print(b.ravel())
[1 1]
print(b1.ravel())
[[1 1]]
小结:ravel对于array展开后为一维,matrix展开后仍为二维
总结
1.*对于array为对应位置相乘,对于matrix为矩阵乘法
2.@和dot运算相同, 对于二维array和matrix均为矩阵乘法,对于一维array为求内积
3.multiply 对于array和matrix均为对应位置相乘
4.ravel对于array展开后为一维,matrix展开后仍为二维
文章详细对比了numpy中array和matrix在使用*、@、dot、multiply和ravel时的不同。*对array表示对应位置相乘,对matrix表示矩阵乘法;@和dot对二维array和matrix执行矩阵乘法,对一维array计算内积;multiply在array和matrix上均执行对应位置相乘;ravel将array展开成一维,但matrix展开后仍保持二维结构。
1007

被折叠的 条评论
为什么被折叠?



