首先创建一个人工数据集,并存储在CSV(逗号分隔值)文件 ../data/house_tiny.csv
中。 以其他格式存储的数据也可以通过类似的方式进行处理。 下面我们将数据集按行写入CSV文件中。
import os os.makedirs(os.path.join('.', 'data'), exist_ok=True) #用两个点可能因为权限问题,创建失败 data_file = os.path.join('.', 'data', 'house_tiny.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')
要从创建的CSV文件中加载原始数据集,我们导入pandas
包并调用read_csv
函数。该数据集有四行三列。其中每行描述了房间数量(“NumRooms”)、巷子类型(“Alley”)和房屋价格(“Price”)。
# 如果没有安装pandas,只需取消对以下行的注释来安装pandas # !pip install pandas import pandas as pd data = pd.read_csv(data_file) print(data)
--》
NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000
对上述列表进行处理缺失值
fillna 的含义是填充空值 如数组X.fillna(1)即将数组X中的所有空值NAN填充为1
mean的含义是取数值的平均数 如数组X.mean()的值为数组X中所有数值的平均值 #括号必须带上
表格分割:
用data.ilco函数
eg:inputs=data.iloc[:,0:2]
问题:为什么?
inputs = inputs.fillna(outputs.mean()
为
而
inputs = inputs.fillna(inputs.mean())
为
后者的Alley没有改变
pandas中的get_dummy函数,是将拥有不同变量的值转化为0/1数值
使用:pd.get_dummies(目标数组或者行列,prefix='这一行或者列的名称')
eg:inputs = pd.get_dummies(inputs, prefix='Alley')
csv数值类型转化为张量类型:
用torch.tensor() 可将括号中的数值转化为张量类型
eg:torch.tensor(x.values) 加了value表示数字矩阵,意思是一个数值,不加value表示张量本身
访问张量的长度:
len(x)
自定义矩阵:
用A=torch.tensor([a,b,c,d])
得tensor([a,b,c,d])这样一个一维矩阵A
然后通过A.reshape(n*m)得自己想要的一个多维矩阵
矩阵转置:
可用A.t()或A.T对矩阵A进行转置
对称矩阵的原矩阵与转置后的矩阵完全相同 ,即若B为对称矩阵则有B==B.T
矩阵求和与矩阵的指定求和:(可以做到降维的效果)
A.sum()即对A中所有元素求和
A.sum(axis=0)即按照特定的轴求和,axis=0则按照所有行的元素求和来降维,最后结果中,输出轴0消失 若axis=1,则按照所有列的元素求和来降维
这里的0,1是序数词,若数组格式为A.shape=[5,4,6, 7 ],则axis=0代表的是5这个维度,axis=1代表的是4这个维度,axis=2代表的是6这个维度,axis=3代表的是7这个维度
eg1:二维
axis=0
排序为0的5维度不见了,结果转化为1维
axis=1
排序为1的4维度不见了,结果转化为1维
eg2:三维
如果不想丢掉维度,则用A_sum=A.sum(axis=n,keepdims=True) #n为小于维度总数-1的一个数
此做法有利于广播机制的使用(求和前后维度不变),因为广播机制可以在维度相同时使用,即A/A_sum可以直接计算
求均值:
用mean
点积(内积):
用dot(A,B)对应元素乘积之和,结果是一个标量,可用<A,B>表示其运算,若<A,B>对A求导,则结果为A的转置
矩阵与矩阵的积:
用torch.mm(A,B)即矩阵乘法
矩阵与向量的积:
用torch.mv(A,x)即矩阵乘以一个向量
求向量L2范数:
用torch.norm() #括号中间写矩阵 eg:torch.norm(A)
求向量L1范数:
用torch.abs().sum() #abs的括号里面写矩阵即可 eg:torch.abs(A).sum()
求矩阵佛罗贝尼乌斯范数:
即用求向量L2范数的方式,用norm即可
2022/3/7
特别感谢:李沐大神