# 引用包 import numpy # 简写 import numpy as np #把矩阵转换为张量 import torch # 列表 list1 = [ [1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15] ] print(list1) #把list1转换为矩阵 array1 = np.array(list1) print(array1) # 矩阵的操作 # 合并 array2 = np.array(list1) print(array2) # 竖合并 array3 = np.concatenate((array1, array2)) #后面加axis=0等效(默认是axis=0) print(array3) # 横合并 array4 = np.concatenate((array1, array2), axis=1) print(array4)矩阵维度:竖着为0维,横着为1维,立体方向为2维,以此类推。 # 切片(左闭右开) print(list1[1:2]) print(array1[1:2]) #行切片 print(array1[1:3, 1:3]) #行列切片 print(array1[:,1:3]) #列切片 print(array1[:,:]) #不切 # 跳着切 idx = [1, 3] print(array1[:, idx]) #跳着切矩阵1,3列
import torch #引用张量 import numpy as np list1 = [ [1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15] ] print(list1) # 转换为张量 (目的是把矩阵放在张量网上,可以进行计算,求梯度) tensor1 = torch.tensor(list1) print(tensor1) # 计算实例(梯度回传的实例(原理)) x = torch.tensor(3.0) x.requires_grad_(True) #表示x在计算时需要计算梯度 y= x**2 y.backward() #求y中所有参数的梯度 print(y) print(x.grad) y2 = x**2 y2.backward() print(y2) print(x.grad) #这边输出为12,为什么不是6?因为张量网上计算x的梯度后会保留,前面计算过一次x的梯度为6,再计算一次为6+6=12.所以在第二次计算前要有清零操作:"x.grad = torch.tensor(0.0)" #当x变成张量时很多事情做不了,如画图,存储 #把x从张量网上摘下(不再计算梯度) x = x.detach() # 创建张量 # 创建全为1的张量,10行4列 tensor2 = torch.ones((10,4)) print(tensor2) # 创建全为0的张量,10行4列 tensor3 = torch.zeros((10,4)) print(tensor3) #创建随机数的张量(正态分布) tensor4 = torch.normal(0, 0.01, (10,4)) #normal(平均数,标准差,张量规格) print(tensor4) # 3维张量 tensor5 = torch.normal(10, 1, (2,10,4)) print(tensor5) # 张量求和 # 张量里所有值的和 sum1 = torch.sum(tensor2) print(sum1) # 分别竖加 sum2 = torch.sum(tensor2, dim=0) print(sum2) # 横加 sum3 = torch.sum(tensor2, dim=1) print(sum3) # 保持形状横加 sum4 = torch.sum(tensor2, dim=1, keepdim=True) print(sum4) # 报错callable表示多打了小括号 # 输出张量规格 print(tensor2.shape)
# 引用其他代码文件 from mytensor import tensor2 #会把mytensor中所有代码运行一遍 引入张量 from myclass import superman #会把myclass中所有代码运行一遍 引入类 print(tensor2)