nipeiyang

it2025-06-11  19

第一周学习报告(笔记部分) 1.

去除字符串结尾空白: str.strip() 去除字符串开头空白: str.lstrip()

用.append()函数为列表增加元素时,会在对列表执行的操作最后再执行,charm.append()一定是在最后加上. 比如上图先写了.append(),再写了在-2位插入新元素。显然插入先执行。

在对列表进行操作时,注意是永久性改变还是临时改变. 如charm.sort()是永久性,而sorted(charm)是临时性改变 在下文中sorted可以用来按顺序遍历字典中的键或值

列表解析是一种特殊的for loop,比较简洁 如创造一个列表来求平方数如下 square=[value**2 for value in range(1,11)] 这样可以得到一个求1–10的平方数的列表

列表切片:不指定起始索引,在从头开始:不指定终止索引,则一直到最后与range函数一样,终止索引的值应比预期输出的索引大1 charm[0:3]即索引从0到2

可以用切片的方法完成对列表的复制. 复制列表时不能单纯地对列表名变量进行赋值,否则只这两个变量指向同一个列表,不能对其进行单独的分别的列表编辑操作

元组即不能修改的列表.可进行赋值,但不能编辑

字典:与列表和元组相似,但需要使用花括号. 字典名={键:值} 也可定义空字典,再一个一个输入键值对

若要在print中输出文字及变量 则变量名不应该出现在" “或’ '中,否则无法输出 而应该在单双引号外用”+"连接变量和文字

遍历字典中的键与值可用.items()和for循环 for k,v in dictionary.items(): 遍历字典中的所有键,可以用.keys()函数 for key in dictionary.keys(): 以上两种遍历顺序无法确定 如要按顺序遍历所有键,可以搭配函数sorted for key in sorted(dictionary.keys()): 同理,若要遍历字典中的值.可用.value()函数 若要按顺序遍历,则用for value in sorted(dictionary.value())

对包含重复元素的列表可用函数set检查其中出现过的元素并提取出来创建一个集合。该集合类似于列表

12. print函数中int 与 str 的问题: ## TypeError: can only concatenate str (not “int”) to str ## 只能将str类型(不是int 类型)与str类型连接起来

Python将空字符串解读为True,可将此运用到while loop的循环退出条件中

创建多行字符串可以用如下方式: str = str1 str += str2 print(str) => str1 str2

*p代表定义一个名为p的元组 **p代表定义一个名为p的字典

定义函数时,可以在函数形参中用**p定义一个字典,实现传递任意数量的关键字实参:

def function(x1,x2,...,xn,**p) x1 x2 . . . xn for k,v in p.items(): p[k] = v ...

第二周学习报告(笔记部分) 17. 约定类中的函数叫方法 约定首字母大写的名称是类,小写的是类中的方法 若想要类中的一个方法每当根据该类创建实例时都自动运行它,则约定该方法的名称开头和结尾都要有"_" 类中的方法在定义时都要有形参self,并置于所有形参之前,在调用该方法时,会自动传入实参self,无需手动传递.其余的形参和还需手动传递实参. 以self为前缀定义的变量可供类中的所有方法使用.

在写入文件路径时为避免由于’‘引起错误,在地址字符串的’‘前应加’r’

文件操作函数: 逐行读取:for lines in file_object: 读取文件并转化为字符串存在列表中:strings = file_object.readlines() (要注意空格空白换行问题) 以’w’模式打开文件时,若该文件存在,则会覆盖重新写文件 若想继续操作不覆盖,则以’a+‘模式打开文件 函数write()不会在写入文本的末尾加上’\n’

20.NumPy: import numpy as np 1)arrange函数:np.arrange(),此函数与range()一样,范围不包含右侧的数字 2)通过实例访问的变量叫属性 file_object.dtype是属性,不是函数,不用() 3)Python中生成随机小数的函数:

import random num1 = random.random()

取小数的位数函数:

num2 = np.round(num1,n) #此时num2为随机生成的小数num1的n位 #也可以用"%.nf"%random.random()生成取n位的小数

4)reshape函数有返回值,有返回值的函数一般都不对操作对象做出永久改变,即只是临时改变操作对象并返回改变后的值. 扩展:extend()函数在列表结尾追加多个值并对原列表做出改变 5)一维数组,二维数组和多维数组最直观的区别就是中括号的个数 6)将一个多维数组传变成一维数组,可以用flatten函数. arrrayx.flatten() 该函数有返回值,只是临时改变 7)常用api: ①中位数:np.median(arr) ②百分位数:np.percentile(arr,n) (n为int型) 该函数返回arr中n%位置的数 ③最大值最小值:arr.max() arr.min() 返回最大值最小值索引:arr.argmax() arr.argmin() (返回的索引是一维的,因为Python把高维数组转成一维数组再进行上述操作) ④求和:arr.sum() 返回该数组所有元素的和 ⑤均值:arr.mean() 标准差:arr.std() 方差:arr.var() ⑥参数–轴:可以用axis控制,限制聚合函数的聚合方式 例:arr.sum(axis=0) 求arr各行的和 或arr.sum(0) arr.sum(axis=1) 求arr各列的和 或arr.sum(1) ⑦Boll数组 e.g.求arr中大于0的项的和: (arr>0).sum() 两个对于Boll数组专门的api: any 和 all (arr>0).any():如果arr中存在大于0的数就返回True (arr>0).all():如果arr中全部的数都大于0,则返回False ⑧排序 补充:inplace函数是对原值操作并改变原值,无返回值 NumPy中sort函数是inplace函数 arr.sort(0):对arr中各行从小到大排序 ⑨构造等差数列: dengcha = np.linspace(n1,n2,n3) 分别代表开始值,结束值,数组中元素个数.(默认包含结束值) 也可以不包含结束值:np.space(n1,n2,n3,endpoint=False) 等比数列dengbi = np.longspace(n1,n2,n3)

21.字符串空格处理等相关问题: str = … str.strip()去除字符串开头和结尾的空白; str.lstrip()去除字符串左边的空白; str.rstrip()去除字符串右边的空白; str.replace(‘m’,‘n’)将字符串中的m替换为n 特别注意:replace函数与去除字符串空白函数均只是临时改变字符串

22.arange()函数可以生成小数而range()函数只能填入整数

第三周学习笔记 23. 在print中,若预期输出n个相同内容,可不选择用循环,而用*n, 注意:这个多次输出的"*n",只对str类型成立,对数字类型则变为普通乘法,若想对数据进行重复输出,可以用str()函数转换类型 如下面两个例子: print(np.random.random()*10) print((str(np.random.random())+" ")*10)

24.Pandas: Ⅰ:创建dataframe: pd.DataFrame() 此类型会有行标(index)和列标(columns) 有两种创建方式:①借用NumPy的数组,然后index = ? columns = ? ②向DataFrame()的参数中传入列表,一列一列初始化,此时,列表的键名称就是列标,行标可以再用index = ? 第一种:p3 = pd.DataFrame(np.random.randn(3,4)*10,index = index1,columns = columns1) print(p3) 第二种:p4 = pd.DataFrame({‘C1’:range(1,4), ‘C2’:range(5,8), ‘C3’:range(11,14), ‘C4’:range(99,102)},index = index1) print(p4) Ⅱ:选择数据 df = pd.DataFrame(np.arange(12).reshape(3,4),index = np.arange(1,4),columns = [‘a’,‘b’,‘c’,‘d’]) print(df) print(df[‘a’]) 用中括号方法时只能填入列标并输出该列,不能操作行标 print(df.loc[1]) 用loc标签时不能单独使用列标而可以单独使用行标 print(df.loc[1:3,[‘a’,‘b’,‘c’]]) loc标签可以使用" : "切片遍历行标,而不能遍历列标,只能一个一个单独选择

第三周学习笔记

25.Pandas: Ⅰ使用pd.read_csv(‘file_name.csv’)导入数据时,导入的文件应在路径中 查看路径的方法: import os print(os.getcwd()) 也可以放在任何路径中,但导入时需要在pd.read_csv()的括号中写入 r ‘文件的路径’

26.Matplotlib: ①x = np.linspace() y = … plt.plot(x,y,color = ‘pink’,linewidth = 10.0,linestyle = ‘–’) plt.show() //展示图像 ②设置x,y坐标轴的范围 plt.xlim((-1,1)) plt.ylim((0,1)) ③设置坐标轴的ticks(设置坐标轴上的卡点) plt.xticks((-1,1)) //x轴上两个卡点-1和1 plt.yticks([-1,1,2,3,4,5],[‘y1’,‘y2’,‘y3’,‘y4’,‘y5’,‘y6’]) //y轴上6个卡点,且从上到下卡点名称依次为y1–y6 改变ticks字体可以用r’ $ content $ ',在$ $中空格用转义字符\ 表示,特殊字符也可以用转义字符,如α:\alpha ④改变坐标轴位置: 框架有四个,top,left,right,bottom ax = plt.gca() //gca = get current axis 引用时用:ax.spines[‘top’] 让它消失:ax.spines[‘top’].set_colors(‘none’) 设置充当坐标轴的脊梁: 让左和下脊梁分别充当y,x轴 ax.xaxis.set_ticks_position(‘bottom’) ax.yaxis.set_ticks_position(‘left’) ⑤改变x,y轴位置: //以下两个用的都是’data’参数,也可以用’axes’参数,后面加的数据代表将其绑定在另一个轴的百分之多少 ax.spines[‘left’].set_position((‘data’,0)) ax.spines[‘bottom’].set_position((‘data’,0)) //把x轴绑定在y轴的0位置. //把y轴绑定在x轴的0位置上 ⑥scatter散点图 plt.scatter(x,y,s = ,c = ,alpha = ) ⑦bar柱状图 plt.bar(x,y) 设置xlim,ylim,xticks和yticks与scatter散点图的操作相同

27.NuMpy补充笔记: ①建立一个数组(矩阵)可以用np.array() 若要建立二维数组那()就因该有两个系统的[] 三维数组则应有三个系统的[] ②矩阵数乘可以用*号进行运算,矩阵与矩阵之间的乘法用np.dot(A,B)实现 或A.dot(B) ③np.power对数组进行乘方运算 np.power(X1,X2) 若要进行数组与数组的乘方运算,X1与X2的列数必须相同,X2中对应的元素为指数 X2还可以为一个数字 ④np.zeros(shape, dtype=None, order=‘C’) Return a new array of given shape and type, filled with zeros

第四周学习笔记 (代码实现过程中复习到的知识) 28.Dataframe.insert(loc, column, value, allow_duplicates=False): 在Dataframe的指定列中插入数据。 参数介绍: ①loc: int型,表示第几列;若在第一列插入数据,则 loc=0 ②column: 给插入的列取名,如 column=‘新的一列’ ③value:数字,array,series等都可(可自己尝试) ④allow_duplicates: 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复。

np.linalg.inv(A) 该函数返回A的逆矩阵

线性回归实现代码

VERSION 1.0 (对训练集中的y也进行了归一化处理.且归一化处理方式是(原值-均值)/最大值) import numpy as np import pandas as pd import matplotlib.pyplot as plt

def hypothesis(X,theta): y = X.dot(theta.T) return y

def computeCost(X,y,theta): inner = np.power((X.dot(theta.T)-y),2) return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch): temp = np.array(np.zeros(theta.shape)) cost = np.zeros(epoch) m = int(X.shape[0]) for i in range(1,(epoch+1)): temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X) theta = temp cost = computeCost(X, y, theta) return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False) alpha = 0.1717 epoch = 10000 data.insert(2,‘ones’,1) cols = data.shape[1] data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].mean())/data.iloc[:,5].max()) data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].mean())/data.iloc[:,7].max()) for i in range(14,17): data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].mean())/data.iloc[:,i].max()) X = data.iloc[:,2:cols-1] y = data.iloc[:,cols-1:cols] X = np.array(X.values) y = np.array(y.values) theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]]) final_theta,cost = gradientDescent(X,y,theta,alpha,epoch) print(“the final theta is:”) print(final_theta) print(cost)

#已经求得最优的theta,现输入需要预测的变量 XX = np.zeros((1,14)) for j in range(0,14): XX[0][j] = input(“input the data you want to do the hypothesis:”) yy=hypothesis(XX,final_theta) print(yy)

VERSION 2.0 (没有对y进行归一化处理,归一化时分母用了max-min) import numpy as np import pandas as pd import matplotlib.pyplot as plt

def hypothesis(X,theta): y = X.dot(theta.T) return y

def computeCost(X,y,theta): inner = np.power((X.dot(theta.T)-y),2) return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch): temp = np.array(np.zeros(theta.shape)) cost = np.zeros(epoch) m = int(X.shape[0]) for i in range(1,(epoch+1)): temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X) theta = temp cost = computeCost(X, y, theta) return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False) alpha = 0.174 epoch = 10000 data.insert(2,‘ones’,1) cols = data.shape[1] data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].mean())/(data.iloc[:,5].max()-data.iloc[:,5].min())) data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].mean())/(data.iloc[:,7].max()-data.iloc[:,7].min())) for i in range(14,16): data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].mean())/(data.iloc[:,i].max()-data.iloc[:,i].min())) X = data.iloc[:,2:cols-1] y = data.iloc[:,cols-1:cols] X = np.array(X.values) y = np.array(y.values) theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]]) final_theta,cost = gradientDescent(X,y,theta,alpha,epoch) print(“the final theta is:”) print(final_theta) print(cost)

#已经求得最优的theta,现输入需要预测的变量 XX = np.zeros((1,14)) for j in range(0,14): XX[0][j] = input(“input the data you want to do the hypothesis:”) yy=hypothesis(XX,final_theta) print(yy)

VERSION 3.0 (归一化用分子用原值-min()) (当学习度为0.159时,cost=0.081) def hypothesis(X,theta): y = X.dot(theta.T) return y

def computeCost(X,y,theta): inner = np.power((X.dot(theta.T)-y),2) return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch): temp = np.array(np.zeros(theta.shape)) cost = np.zeros(epoch) m = int(X.shape[0]) for i in range(1,(epoch+1)): temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X) theta = temp cost = computeCost(X, y, theta) return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False) alpha = 0.159 epoch = 10000 data.insert(2,‘ones’,1) cols = data.shape[1] data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].min())/(data.iloc[:,5].max()-data.iloc[:,5].min())) data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].min())/(data.iloc[:,7].max()-data.iloc[:,7].min())) for i in range(14,16): data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].min())/(data.iloc[:,i].max()-data.iloc[:,i].min())) X = data.iloc[:,2:cols-1] y = data.iloc[:,cols-1:cols] X = np.array(X.values) y = np.array(y.values) theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]]) final_theta,cost = gradientDescent(X,y,theta,alpha,epoch) print(“the final theta is:”) print(final_theta) print(cost)

#已经求得最优的theta,现输入需要预测的变量 XX = np.zeros((1,14)) for j in range(0,14): XX[0][j] = input(“input the data you want to do the hypothesis:”) yy=hypothesis(XX,final_theta) print(yy)

第五周学习笔记 31.对于DataFrame中loc和iloc的区别: iloc只能使用数字索引,而loc可以索引和字符标签一起使用 无论是iloc还是loc 均采用[]而不是括号 如果只是取行 建议用iloc 因为比较简单 如果列和行同时取 建议采用loc 因为可以直接定义到标签

32.在实现预测时,导入csv文件时出现的问题: 有时会出现UnicodeDecodeError: ‘utf-8’ codec can’t decode byte…的问题.此时是创建csv文件时出现了问题. 创建csv文件不能用excel表格直接更改后缀为.csv 应该创建记事本.txt文件,两个数据之间用半角逗号隔开,最后另存为时更改后缀.csv并且把解码格式设置为utf-8. 用wps或其他应用打开即可

第六周学习笔记 33. 重要发现: 列表甚至可以当成指针来操作,用来解决函数中形参不能传给实参的问题 比如以下代码.欲用tkinter将输入值传给method;由于button的command只能传入函数名(不能带参数),因此涉及到形参传给实参的问题:

import tkinter as tk lyst=['path'] def input_file(): lyst[0]=e.get() window=tk.Tk() window.title('输入预测文件的绝对路径') window.geometry('400x400') b1=tk.Button(window,text='hit me to input',width=15,height=3,command=input_file,bg='yellow') b1.pack() b2=tk.Button(window,text='hit me to quit',width=15,height=3,command=window.quit,bg='red') b2.pack() e=tk.Entry(window,show=None) e.pack() window.mainloop() print(lyst[0])

该代码可以按照设计意图完美运行,令人惊叹: 在定义input_file函数时,没有传入任何参数(比如lyst),但lyst[0]仍可以在函数中被赋值并可以在函数外输出正确的值

给程序添加背景音乐: 需要import pygame as py ①初始化: py.mixer.init() ②加载本地音乐: py.mixer.music.load(‘music_path’) ③播放音乐: py.mixer.play(-1,time) 有两个参数:第一个是播放类型(-1是指循环播放,time是音乐开始播放的时间)

设置背景图片(其实是设置一个label) 需要from PIL import Image,ImageTk ①首先需要打开本地图片 image_ = Image.open(‘image_path’) ②读取背景图片 background_image = ImageTk.PhotoImage(image_) ③设置图片大小(需要根据窗口大小调整)

Label(父对象, text=“标签内容”, width=“宽度”, height=“高度”, anchor=“对齐方式”,font=( 字体, 字号, 粗体, 斜体, 下划线, 删除线)") anchor:对齐方式 可选内容包括 n:靠上 w靠左 s靠下 e靠右 或者组合使用,,如nw 左上方对齐

第七周学习笔记 37. cmd选择上一行命令可以直接使用小键盘向上 conda创建新环境: conda create -n npy_tensorflow python==3.7 创建一个名为npy_tensorflow的,python版本为3.7的env

第八周学习笔记 38. data.device用来查看data是在cpu还是gpu类型的数据 data=data.cpu()可以将其转换为cpu类型 a = tf.convert_to_tensor(a,dtype=tf.int32)可以将a转换为int32的tensor数据类型 常见使用cast操作进行数据类型的转换 data=tf.cast(data,dtype=tf.int32)将data转换为int32的tensor数据 39. tf.Variable数据类型让该数据可进行求导 Variable类型的数据比较特殊,其有data.name和data.trainable a=tf.Variable(data,name=‘name’)

最新回复(0)