Numpy 中的线形代数模块

主要为将来的张量(Tensor)计算打基础

NumPy 包包含numpy.linalg模块,提供线性代数所需的所有功能,主要功能有下

dot                     两个数组的点积
vdot                    两个向量的点积
inner                   两个数组的内积
matmul                  两个数组的矩阵积

1 点积 numpy.dot()
对于一维数组(向量),相当于内积;对于二维数组(矩阵),相当于矩阵乘法;对于多维数组(张量),它是a的最后一个轴上的和与b的倒数第二个轴的乘积。

import numpy as np

a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
b = np.array([[[2,4],[3,6]],[[4,8],[5,10]]])
c = np.dot(a,b)

print(a)
print(b)
print()
print(c)
# 输出
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
[[[ 2  4]
  [ 3  6]]

 [[ 4  8]
  [ 5 10]]]

[[[[  8  16]
   [ 14  28]]

  [[ 18  36]
   [ 32  64]]]


 [[[ 28  56]
   [ 50 100]]

  [[ 38  76]
   [ 68 136]]]]

对于二阶以下的都很好理解,这里画图举例一个(2,2,2)与(2,2,2)的np.dot的结果:

2 向量点积 vdot()

import numpy as np 
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
print np.vdot(a,b)
#输出
130

EZ

3 内积 numpy.inner()
对于一维数组,返回向量内积
对于高维数组,先将高维数组分成多个一维数组,再依次做向量内积:

import numpy as np
a = np.array([[1,2], [3,4]])
b = np.array([[11, 12], [13, 14]])
c = np.inner(a,b)

print (a)
print(b)
print(c)
#输出
[[1 2]
 [3 4]]
[[11 12]
 [13 14]]
[[35 41]
 [81 95]]
 #计算过程如下
1*11+2*12, 1*13+2*14 
3*11+4*12, 3*13+4*14

4 矩阵乘积 numpy.matmul()
numpy.matmul()函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。
另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。
发现与inner()结果是一样的…

#一个是一维的数组
import numpy as np
a = np.array([[1,2], [3,4]])
b = np.array([11, 12])
c = np.inner(a,b)

print(a)
print(b)
print()
print(c)
#输出
[[1 2]
 [3 4]]
[11 12]

[35 81]
#一个是多维数组
import numpy as np
a = np.arange(8).reshape(2,2,2)
b = np.arange(4).reshape(2,2)
c = np.matmul(a,b)

print(a)
print()
print(b)
print()
print(c)
#输出
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]

[[0 1]
 [2 3]]

[[[ 2  3]
  [ 6 11]]

 [[10 19]
  [14 27]]]
  #计算过程是将a分成两个矩阵,依次与第二个矩阵相乘:
  [[[0 1] * [[0 1]
   [2 3]]    [2 3]],
   [[4 5] * [[0 1]
   [6 7]]    [2 3]]] 

参考:
https://blog.csdn.net/wc781708249/article/details/78194039?locationNum=10&fps=1
https://www.yiibai.com/numpy/numpy_linear_algebra.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值