学python中(主要是机器学习方面的)学到的一些函数和常见的处理方法,容易忘记所以记录一下,持续更。。。
torch.cat 用于拼接两个矩阵
import torch
x=torch.zeros(3)
y=torch.ones(3)
z=torch.cat((x,y),0)
print(z)
x=torch.zeros(3,1)
y=torch.ones(3,1)
z=torch.cat((x,y),1)
print(z)
不过这个只能用于tensor类型的拼接,numpy类的需要用到numpy.hstack或numpy.vstack,详看下文。
enumerate是枚举,列出某一列的每一个数x2以及它们对应的序号x1。
y=list([11,22,33,44,55,66])
for x1,x2 in enumerate(y):
print(x1,x2)
import numpy as np
a=[1,2,3,5]
b=[5,6,7,8]
c=np.vstack((a,b))
d=np.hstack((a,b))
print(c)
print(d)
可以显示出训练过程的所绘制图表的变化
plt.on
...... #(训练过程)
plt.off
randint函数,可以在给定的范围内随机取一个或多个整数
random.randint() 只能取一个整数
numpy.random.randint() 可以通过设置取得多个整数
import random
import numpy as np
print(random.randint(1,20)) # 随机从0到20之间取1个数
print(np.random.randint(1,20,3)) # 随机从0到20之间取3个数
参数0表示查询行数,参数1表示查询列数
a=torch.zeros(2,3)
a[0,0]=1
a[0,1]=2
a[0,2]=3
a[1,0]=4
a[1,1]=5
a[1,2]=6
print(a)
y=a.size(1) # 0是行数,1是列数
print(y)
x=np.size(a,1)
print(x)
slice函数,即切片函数,可以从已知数组中取部分连续的数据。
import torch
x=torch.linspace(0,9,10)
print(x)
slice1=slice(0,5,1) # 在第1到第5个数中,步长为1,每个都取
slice2=slice(0,6,2) # 在第1到第6个中,步长为2,每隔一个取一个
y=x[slice1]
print(y)
y=x[slice2]
print(y)
from sympy import *
x= symbols('x')
print(solve(x**2+5*x+6,x))
sum函数:对矩阵中的全部或部分元素进行求和
# 特定维度求和函数
y=torch.ones(2,3)
y[[0,0],[1,0]]=2
x1=torch.sum(y) # 对全部元素进行求和
print(x1)
x2=torch.sum(y,dim=(0,1),keepdim=True) # 对行和列的元素进行求和且不改变维度
print(x2)
x3=torch.sum(y,dim=(0,)) # 对各列进行求和,不保持原有维度
print(x3)
x4=torch.sum(y,dim=(0,),keepdim=True) # 对各列进行求和,保持原有维度
print(x4)
x5=torch.sum(y,dim=(1,)) # 对各行进行求和,不保持原有维度
print(x5)
x6=torch.sum(y,dim=(1,),keepdim=True) # 对各行进行求和,保持原有维度
print(x6)
y=torch.ones(2,3)
y[[0,0],[1,0]]=2
print(y)
x4=y[0].sum() # 对第1行进行求和
x5=y[1].sum() # 对第2行进行求和
x6=y[:,0].sum() # 对第1列进行求和
x7=y[:,2].sum() # 对第3列进行求和
print(x4)
print(x5)
print(x6)
print(x7)
可以用tensor函数来定义数组
x=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
print(x)
zeros函数和ones函数也可以定义数组,
x=torch.zeros(2)
print(x)
x=torch.zeros(2,1)
print(x)
x=torch.ones(2)
print(x)
x=torch.ones(2,1)
print(x)
(1)torch.transpose(y,1,0) 表示第0维和第1维互换,比如对于一个二维数组,若换之前是2×3数组,换之后是3×2数组。
# 用transpose对数组进行维度互换
y=torch.zeros(2,3)
y[[0,0],[1,0]]=2
print(y)
x=torch.transpose(y,1,0)
print(x)
(2)对于三维数组,tensor.transpose(y,1,2) 表示第1维和第2维互换,变换之前是2×3×4数组,变换后是2×4×3数组。
y=torch.zeros(2,3,4)
y[[0,0],[1,0]]=2
print(y)
x=torch.transpose(y,1,2)
print(x)
把tensor定义为torch.autograd.Variable变量后,可以拥有autograd包中的属性,比如通过 .data 访问tensor中的所有变量;通过 .backward() 反向传播更新参数。
import torch
x=torch.zeros(4,4)
print(x)
x[[0,1,2,3],[0,1,2,3]]=8 # 给[0,0],[1,1],[2,2],[3,3]位置赋值8
print(x)
import torch
x=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
print(x)
print(x[:,1]) # 只有冒号表全部,表示x的第2列
print(x[1,:]) # 表示x的第2行
print(x[:,0:1]) # 冒号前表示起,冒号后表示止,0到1其实打印的是第一例
print(x[1:2,:]) # 1到2,表示第2横
print(x[:,1:]) # 表示第2列起后的全部,在这里就表示第2列和第3列
print(x[:,-1:]) # 表示最后1列
print(x[:,:-1]) # 表示除最后1列的全部
print(x[:,-2:]) # 表示最后2列
print(x[:,:-2]) # 表示除最后2列的全部
首先需要在当前目录新建一个csv文件,
【File】→【New】→【File】,起文件名并把文件名后缀设置为 .csv 即可。
相比较与csv的操作,俺觉得用pandas对csv文件进行操作是比较简单方便的。
import torch
import pandas as pd
# 对csv文件进行写操作(用pandas)
with open('BDL2_testDataset.csv','w')as file:
x=torch.linspace(0,500,101)
x1 = torch.linspace(0, 500, 101)
y=2*x
data=pd.DataFrame({'x':x,'x1':x1,'y':y})
data.to_csv(file)
# 对csv文件进行读操作(用pandas)
dt = pd.read_csv("BDL2_testDataset.csv")
dt.head()
data_set = dt.values
data_x=data_set[:,1:2].astype(float)
data_y = data_set[:,3:].astype(float)
print(data_x)
print(data_y)
import pandas as pd
df=pd.read_csv("testdataset_2.csv")
print(df)
print(' ')
df.loc[8]=[1,1,1,1] # 对第8行写入新的数据
print(df)
Notice:
如果是刚创建的一个新的csv文件,里面什么都没有,此时写入会出错
给这个文件随便加个表头(手动在第一行写入一行)就就可解决这个问题
import pandas as pd
df=pd.read_csv("testdataset_2.csv")
print(df)
x1=df.loc[2] # 读取第3行数据
x2=df.loc[2,:] # 读取第3行数据
x3=df.iloc[2,:] # 读取第3行数据
x6=df.iloc[:,2] # 读取第3列数据
x7=df.iloc[2,0] # 读取第3行第1列数据
print(x1)
print(x2)
print(x3)
print(x6)
print(x7)
df=pd.read_csv("testdataset_2.csv")
print(df)
df.drop([0],inplace=True) # 删去第1行
print(df)
df.to_csv("testdataset_2.csv",index=False) # 保存到文件中
Notice:
inplace=True 才能够删除成功;要用语句 df.to_csv写入到文件中,才能对文件进行改动,不然就只是改动了df而已
num1=20.0
num2=20
print(type(num1))
print(type(num2))
import torch
a=torch.ones(2,2,2)
print(a.ndim)
用reshape函数
import torch
a=torch.ones(4)
print(a)
print(a.ndim)
a=a.reshape(1,-1)
print(a)
print(a.ndim)
a=2**3
print(a)
print("Start train...")
start = time.perf_counter()
self.train(cases, labels, 200, 0.08, 0.1)
end = time.perf_counter()
print("Training complete! Time used: %.2f s"%(end - start))
我对anaconda的理解就是这是一个管理环境的工具(python工程都需要运行在一定的),每一个环境都有特定的python版本、以及一定的库。
一些常用的命令:
关于环境管理:
1、创建一个新的环境(python版本为3.9.0):
conda create -n EnvieonmentName(自定义环境名) python==3.9.0
2、查看当前已创建的环境
conda env list
3、激活已创建的环境
activate EnvironmentName(具体的环境名)
4、删除已创建的环境
conda create -n EnvieonmentName(自定义环境名) --all
关于环境中包的管理:
1、下载某一个包(库)
pip install PackageName(具体的包名)
下载具体版本的包
pip install PackageName(具体的包名)=1.2.0
2、查看某一环境中已下载的包
先激活该环境,然后
conda list
3、查看某一包的具体信息:
pip show PackageName(包的具体的名字)