使用anaconda
创建虚拟环境:
conda create -n 自己输入名称 python=版本号
激活虚拟环境:
conda activate 名称
接着下载包后,环境创建完成,在pycharm或者其他编译器中配置好对应的python环境即可
访问元素
一个数组d
一个元素:d[1,2]
一行:d[1,:] 第一行
一列:d[:,1] 第一列
子区域: [1:3,1:] 第一行到第三行,第一列以后
子区域:[l:r:3,l:r:2],[l,r) 每三行取一个,每两列取一个
Pytorch的一些简单操作
import torch
x = torch.arange(24)
print(x)
print(x.shape) # 看这个矩阵的形状
print(x.numel()) # 矩阵元素的数量
X = x.reshape(2, 3, 4) # 改变矩阵的形状,但不改变元素的个数
print(X)
# 全0 全1矩阵
print(torch.zeros((2, 3, 4)))
print(torch.ones((2, 3, 4)))
# 列表赋值
y = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(y)
print(y.size())
# 矩阵运算
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print('x+y:', x + y)
print('x-y:', x - y)
print('x*y:', x * y)
print('x/y:', x / y)
print('x**y:', x ** y)
# 张量连结
x = torch.arange(12, dtype=torch.float32).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
z = torch.cat((x, y), dim=0) # dim=0 意为在行上合并
z2 = torch.cat((x, y), dim=1) # dim=1 意为在列上合并
print('按行合并')
print(z)
print('按列合并')
print(z2)
# 使用逻辑运算创建二维张量
print(x == y)
# 对张量求和
print(x.sum())
'''广播机制'''
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
print('a:',a)
print('b',b)
'''形状不一样,但维度一样,广播后就成为了3*2的矩阵'''
print(a+b)
'''一些操作会导致为新结果分配内存'''
before = id(y)
y = y+x
print(before == id(y))
'''执行原地操作的方法'''
z1 = torch.zeros_like(y)
print('id(z1):',id(z1))
z1[:] = x+y
print('id(z1):',id(z1))
'''转换为NumPy张量'''
A = x.numpy()
B = torch.tensor(A)
print(type(A))
print(type(B))
数据预处理
import os
import pandas as pd
def init():
os.makedirs(os.path.join('./', 'data'), exist_ok=True)
data_file = os.path.join('./', 'data', 'house_tine.csv') # 创建好路径
with open(data_file, 'w') as f:
f.write('NumRooms,Alley,Price\n') # 列名
f.write('NA,Pave,127500\n') # 每行表示一个数据样本
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
def show_data():
data = pd.read_csv('./data/house_tine.csv')
print(data)
def insert():
data = pd.read_csv('./data/house_tine.csv')
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean(numeric_only=True)) # 对于数值类,插值方法是插入剩余有值部分的均值
print(inputs)
inputs = pd.get_dummies(inputs,dummy_na = True,dtype=float) #对于类别值和离散值,可以将NaN视为一个类别
print(inputs)
show_data()
insert()
线性代数以及pytorch操作
import torch
A = torch.arange(20).reshape(4, 5)
print(A)
print('A的转置:', A.T)
# 如果A==A.T 则为对称矩阵、
X = torch.arange(24).reshape(2, 3, 4) # 越到后面维度越低,2页,3行,4列
print(X)
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone() # 深拷贝,B=A不会创建新的对象
print(A, '\n', A + B)
# 任意维度求和
A = torch.arange(20 * 2, dtype=torch.float32).reshape(2, 5, 4)
print('原始的A矩阵:', A)
A_sum = A.sum()
A_sum_axis0 = A.sum(axis=0)
A_sum_axis1 = A.sum(axis=1)
print('对所有元素求和:', A_sum)
print('对维度0求和,剩下一个5*4的矩阵:', A_sum_axis0)
print('对维度1求和,剩下一个2*4的矩阵:', A_sum_axis1)
# 对某一维度求和,就是合并这一维度,比睿维度1是行,就是行合并,位于同一页同一列的加在一起
'''还可以使用多个轴'''
A_sum_axis01 = A.sum(axis=[0, 1]) # 位于同一列的合并
print(A_sum_axis01)
# 均值
print(A.mean())
print(A.mean(axis=0)) # 按维度求均值
# 计算总和或维度时保持轴数不变
sum_A = A.sum(axis=1, keepdims=True)
print(sum_A)
# 点积
y = torch.ones(4, dtype=torch.float32)
x = torch.tensor([0., 1., 2., 3.], dtype=torch.float32)
print(torch.dot(x, y)) # 作点积
# 也可以做乘法和求和来表示点积
print(torch.sum(x * y))
# 计算AB,m*n的矩阵乘上n*t的矩阵,自动拼接位m*t的矩阵
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = torch.ones(4, 3)
print(torch.mm(A, B))
# 范数
u = torch.tensor([3.0, -4.0])
print(torch.norm(u)) # L2范数
print(torch.abs(u).sum()) # L1范数