import numpy as np
1. 星号(*)
1.1 函数作用
对数组相同位置求积,
对矩阵执行标准的矩阵计算。
1.2 函数说明
数组(两个矩阵的大小必须一致):
A = np.arange(0,4).reshape(2,2)
A
array([[0, 1],
[2, 3]])
B = np.arange(5,9).reshape(2,2)
B
array([[5, 6],
[7, 8]])
A * B
array([[ 0, 6],
[14, 24]])
# 说明
[[0*5, 1*6],
[2*7, 3*8]]
矩阵(矩阵大小满足乘法规则即可 [m,n] * [n,p]):
A_mat = np.mat(A)
A_mat
matrix([[0, 1],
[2, 3]])
B_mat = np.mat(B)
B_mat
matrix([[5, 6],
[7, 8]])
A_mat * B_mat
matrix([[ 7, 8],
[31, 36]])
# 说明
[[0*5+1*7, 0*6+1*8],
[2*5+3*7, 2*6+3*8]]
2. dot() 函数
2.1 函数作用
数组 1维 对应位置相乘再累加
2维 标准的矩阵乘法
大于2维 可以自己尝试
矩阵 标准的矩阵计算
2.2 函数说明
数组
# 1 维
A = np.arange(0,3).reshape(3)
A
>>> array([0, 1, 2])
A.shape
>>> (3,)
B = np.arange(3,6).reshape(3)、
B
>>> array([3, 4, 5])
B.shape
>>> (3,)
np.dot(A,B)
>>> 14 (0*3 + 1*4 + 2*5)
# 2维(数组大小满足矩阵乘法规律)
A = np.arange(0,4).reshape(2,2)
B = np.arange(4,8).reshape(2,2)
np.dot(A,B)
>>> array([[ 6, 7],
[26, 31]])
# 3维
A = np.arange(0,8).reshape(2,2,2)
A
>>> array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
B = np.arange(8,16).reshape(2,2,2)
B
>>> array([[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]])
np.dot(A,B)
>>> array([[[[ 10, 11],
[ 14, 15]],
[[ 46, 51],
[ 66, 71]]],
[[[ 82, 91],
[118, 127]],
[[118, 131],
[170, 183]]]])
矩阵:标准的矩阵乘法操作。
3. multiply() 函数
3.1 函数作用
数组和矩阵都是对应位置相乘,两个相乘的元素的大小必须相同,返回结果的大小和原来结果大小一致。
3.2 函数说明
数组
A = np.arange(0,9).reshape(3,3)
B = np.arange(0,9).reshape(3,3)
np.multiply(A,B)
>>> array([[ 0, 1, 4],
[ 9, 16, 25],
[36, 49, 64]])
矩阵
np.multiply(np_mat(A), np_mat(B))
>>> matrix([[ 0, 1, 4],
[ 9, 16, 25],
[36, 49, 64]])
4.einsum() 强大的可自定义的矩阵乘法计算
4.1 函数作用
数组:
可实现数组内元素求和,数组点积,内积(矩阵点乘),外积(矩阵叉乘)。
矩阵:
可实现单个矩阵的内部计算结果(元素求和、按行列求和、对角线元素操作等),
以及自定义两个矩阵的乘法。
4.2 函数说明
数组
A = np.arange(0,3)
A
>>> array([0, 1, 2])
B = np.arange(3,6)
B
>>> array([3, 4, 5])
# 数组内元素累加求和
np.einsum('i->',A)
>>> 3
# 数组点乘
np.einsum('i,i->i',A,B)
>>> array([ 0, 4, 10])
# 数组内积
np.einsum('i,i',A,B)
>>> 14
# 数组外积
np.einsum('i,j->ij',A,B)
>>> array([[ 0, 0, 0],
[ 3, 4, 5],
[ 6, 8, 10]])
矩阵
A = np.mat(np.arange(0,4).reshape(2,2))
B = np.mat(np.arange(4,8).reshape(2,2))
A
>>> matrix([[0, 1],
[2, 3]])
B
>>> matrix([[4, 5],
[6, 7]])
##########################
# 单个矩阵内部操作
##########################
# 所有元素
np.einsum('ij',A)
>>> array([[0, 1],
[2, 3]])
# 所有元素求和
np.einsum('ij->',A)
>>> 6
# 所有主对角线元素
np.einsum('ii->i',A)
>>> array([0, 3])
# 所有主对角线元素求和
np.einsum('ii->',A)
>>> 3
# 返回按行列求和
np.einsum('ij->i',A)
>>> array([1, 5])
np.einsum('ij->j',A)
>>> array([2, 4])
##########################
# 两个矩阵相乘
##########################
# 点乘
np.einsum('ij,ij->ij',A, B)
>>> array([[ 0, 5],
[12, 21]])
# 外积
np.einsum('ij,jk->ik',A, B)
>>> array([[ 6, 7],
[26, 31]])
# 内积
np.einsum('ij,ij',A, B)
>>> 38