(1)张量及python基础

1.课前准备

  1. 安装Anaconda(自带Jupyter notebook)与python,并安装numpy(安装了Anaconda后无需担心,用CPU运行,CPU版本的matelable)与pytorch(GPU版本的numpy 既能CPU又能GPU)
  2. 安装编辑器Pycharm

2.张量的基础概念

张量阶数例子
标量(没有分量)0能量、温度、一门课的总成绩
向量1速度、力、多门课的总成绩构成的数列
矩阵2算符的系数矩阵、黑白图片
张量N彩色图片(三阶张量)
  • N维张量又称N维数列
  • 张量阶数即为张量指标的个数
  • 向量、矩阵也被称为1阶张量、2阶张量
  • 每个指标可取的值的个数,被称为指标的维数
  • 张量的“直观”定义:多个指标标记下的一堆数

2.1 代码实例

向量:

v = np.random.randn(4,) #生成长度为4的随机向量   randn为高斯分布
print(v)
print(v.shape) #v的形状
print(v.size) #v中包含的元素的个数
print(v.dot(v)) #v和v的内积   v.T表示v的转置
v[1]  = 10.21 #修改v的某个元素 

矩阵:

m = np.random.randn(2,2)  + np.random.randn(2,2) * 1j    # 生成2*2的随机复矩阵
print(m.conj())  # 求矩阵共轭
print(m.conj().T) # 求矩阵共轭转置
print(np.eye(2)#打印单位阵
print(np.zeros((2,4))) #打印全零矩阵

张量:

x = np.random.randn(2,2,2) #随机生成一个2*2*2的三阶张量
print(x.ndim) #张量的阶数
print(np.ones((2,3,2))) #生成全1的三阶张量

3.张量的图形表示

——张量用连接着N个腿(bond)的圆圈或方块表示,N为张量的阶数
在这里插入图片描述
:一个腿表示一个指标

4.张量的基本操作

  • 切片——提取相关元素
  • transpose命令——改变张量指标的顺序
  • reshape命令——张量的阶数可以进行相互的转换(改变张量的形状)

:使用transpose命令和reshape命令转换张量前后,其所包含的元素总个数不变,意义仅在于采用不同的index标记各个元素(改变的只是表示方式,值没有改变)

4.1 代码实例

向量切片:

v = np.arange(6) #输出[0 1 2 3 4 5 ]
print(v[:3]) #输出[0 1 2]

张量切片:

x = np.random.randn(4,4,4)
y = x[:3,1:3,1:]
print(y.shape) #输出为(3,2,3)

代码贴图:
x
在这里插入图片描述
y
在这里插入图片描述

向量的reshape:

V = np.arange(0,6,1) # 产生一个随机的向量,从0到5,步长为1
print(v.reshape(2,3))# 将向量变为2*3的矩阵

注:改变其指标标记的方式,不改变本身。如:在向量V中4的指标为 4 ,在矩阵中为(1,1)

矩阵的transpose:

m = np.array([[11,12,13],[21,22,23]])
print(m.transpose(1,0))# 把第一个指标放在第零个位置,把第零个指标放在第一个位置(转置)

5.张量的基本运算

向量内积
C = ∑ a x a y a C = \sum\limits_a x_ay_a C=axaya
a a a求和
在这里插入图片描述

向量乘矩阵
v b = ∑ a x a M a b = x M v_b = \sum\limits_a x_aM_{ab} =xM vb=axaMab=xM
a a a求和
在这里插入图片描述

矩阵乘矩阵
M a c = ∑ b A a b B b c = A B M_{ac} = \sum\limits_b A_{ab}B_{bc} = AB Mac=bAabBbc=AB
b b b求和
在这里插入图片描述
张量缩并
T a c d e = ∑ b A a b c B b d e T_{acde} = \sum\limits_b A_{abc}B_{bde} Tacde=bAabcBbde
b b b求和
在这里插入图片描述

5.1 代码实例

向量内积,外积,克罗内克积:

np.random.seed(0) #固定随机数种子,每次随机都能随出同一种数
dim = 3
x = np.random.randn(dim,) #三维随机向量
y = np.random.randn(dim,) #三维随机向量
print(np.inner(x,y)) #向量内积
print(np.dot(x,y)) #向量内积
print(x.dot(y)) #向量内积
print(np.outer(x,y))#向量外积
print(np.kron(x,y))#克罗内克积 两个三维向量生成一个九维向量

:克罗内克积与向量外积只差一个reshape()
向量乘矩阵,矩阵乘矩阵:

dim = 3
m = np.random.randn(dim,dim) #随机生成一个3*3的矩阵
x = np.random.randn(dim,) #三维随机向量
print(m.dot(x))#矩阵与向量
print(m.dot(m))#矩阵与矩阵
print(m.trace())#求矩阵迹

张量缩并:
tensordot方法

A = np.random.randn(5,3,2)#生成一个5*3*2的张量
B = np.random.randn(3,6,4)#生成一个3*6*4的张量
#希望将A的第二个指标和B的第一个指标进行收缩
C1 = np.tensordot(A,B,[[1],[0]]) #收缩结果为(5,2,6,4)

einsum方法

A = np.random.randn(5,3,3)#生成一个5*3*3的张量
B = np.random.randn(6,3,3)#生成一个6*3*3的张量
C = np.random.randn(4,3,3)#生成一个4*3*3的张量
T = np.einsum('iab,jbc,kca->ijk',A,B,C) #iab,jbc,kca->ijk是求和公式 ijk为收缩结果指标

演示图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值