Numpy线性代数-numpy.dot()&numpy.vdot()&numpy.inner()

650 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情

前言

NumPyNumPy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。

函数内容
dot两数组的点积
vdot两向量的点积
inner两数组的内积
determinant数组的行列式
matmul两数组的矩阵积
inv求矩阵的逆
solve求解线性矩阵方程

相关函数介绍

numpy.dot()numpy.dot()

numpy.vdotnumpy.vdot()

numpy.inner()numpy.inner()

numpy.determinant()numpy.determinant()

numpy.matmul()numpy.matmul()

numpy.inv()numpy.inv()

numpy.solve()numpy.solve()

numpy.dot()

  • 对于两个数组(一维),计算的是这两个数组对应下标元素的乘积和(内积)
  • 对于二维数组,计算的是两个数组的矩阵乘积
  • 对于多维数组,结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二维上的所有元素的乘积和: dot(a,b)[i,j,k,m]=sum(a[i,j,:]b[k,:,m])dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

参数np.dot(a,b,out=None)

  • a,b:数组
  • out:可选,用于存储计算结果
import numpy as np
a=np.array([1,2,3,4])
b=np.array([1,2,3,4])
ans=np.dot(a,b)#1*1+2*2+3*3+4*4
print(ans)
30
a=np.array(([[1,2],[3,4]]))
b=np.array(([[1,2,3],[4,5,6]]))
ans=np.dot(a,b)#a.shape=(2,2),b.shape=(2,3),ans.shape(2,3) 即矩阵乘
print(ans)
[[ 9 12 15]
 [19 26 33]]

numpy.vdot()

numpy.vdot()函数是两个向量的点积。

  • 如果第一个参数是复数,那么它的共轭复数会用于计算
  • 如果参数是多维数组,它会被展开。
import numpy as np
a=np.array([1,2,3,4])
b=np.array([1,2,3,4])
ans=np.vdot(a,b)#1*1+2*2+3*3+4*4
print(ans)
30
a=np.array(([[1,2],[3,4]]))
b=np.array(([[1,2],[3,4]]))
ans=np.vdot(a,b)# a展开为[1,2,3,4],b展开为[1,2,3,4]
print(ans)
30

numpy.inner()

numpy.inner()函数返回一维数组的向量内积。

  • 如果对于更高的维度,它返回最后一个轴上的和的乘积
import numpy as np
ans=np.inner(np.array([1,2,3,4]),np.array([1,2,3,4]))
print(ans)#[1,2,3,4].[1,2,3,4]
30
a=np.array(([[1,2],[3,4]]))
b=np.array(([[11,12],[13,14]]))
ans=np.inner(a,b)
print('内积:')
print(ans)
内积:
[[35 41]
 [81 95]]

计算公式:

111+2121*11+2*12, 113+2141*13+2*14

311+4123*11+4*12, 313+4143*13+4*14