超算第三轮考核AI方向
任务0:学习安装anaconda和pytorch
任务1:继续学习python基础语法,并完成作业
1、生成如下序列
-
10,20,30,40,50,60
l1=[10*x for x in range(1,7)]
-
1,4,9,16,25,36,49
l2=[x*x for x in range(1,8)]
-
10,-20,30,-40,50,-60
使用简单的if-else语句过滤l3=[10*x if x%2!=0 else -x*10 for x in range(1,7)]
-
10,30,50(要求在 1 的基础上进行过滤)
if语句过滤l4=[10*x for x in range(1,7) if x%2!=0]
-
打印乘法口诀表 (一行完成)
先用制表符将内层for循环创建的每一行元素的列表用join函数连接成一个行字符串,再通过外层循环,使用换行符将每个行字符串连接成一个完整的乘法口诀表
print("\n".join(["\t".join(["{}*{}={}".format(j, i, i*j) for j in range(1, i+1)]) for i in range(1, 10)]))
2、完成计时器对象
由于time.time()
函数的精度不够,故使用time.perf_counter()
获取时间,并将时间间隔存入列表中
import time
class Timer:
def __init__(self):
self.time_list = []
self.start_time = None
def start(self):
self.start_time = time.perf_counter()
def stop(self):
self.stop_time = time.perf_counter()
self.time_interval = self.stop_time - self.start_time
self.time_list.append(self.time_interval)
return self.time_interval
def avg(self):
return sum(self.time_list)/len(self.time_list)
def sum(self):
return sum(self.time_list)
def cumsum(self):
return self.time_list
if __name__ == "__main__":
timer = Timer()
timer.start()
x,y = 1,2
print(x + y)
print(f"{timer.stop():.8f} sec")
print(timer.time_list)
3、完成累加器 Accumulator 类
Accumulator 是一个实用程序类,用于对多个变量进行累加; 提示:例如定义 n=2 的累加器 a,其会定义一个大小为 2 的列表 [0,0]; 调用 a.add(2,3) 之后其列表的值 对应累加为 [2,3]; a[idx] 则返回列表对应的索引的值; reset 重置这个列表为全零 [0,0]
在完成以上需求的基础上,我添加了一个改变列表长度的方法resize
,并且能在传入的变量个数大于列表长度的时候自动拓展列表长度
class Accumulator:
def __init__(self,n):
self.n = n
self.A_list = [0] * n
#改变列表长度
def resize(self,new_size):
if new_size > self.n:
self.n = new_size
self.A_list += [0]*(new_size - len(self.A_list))
else:
self.n = new_size
self.A_list = self.A_list[new_size]
def add(self,*args):
if len(args) > self.n:
self.resize(len(args))
#enumerate返回枚举对象,类似索引值和目标值的键值对
for i,val in enumerate(args):
self.A_list [i] += val
#也可以用zip函数实现
#self.A_list = [sum(x) for x in zip(args,self.A_list)]
def reset(self):
self.A_list = [0] * self.n
#下标索引
def __getitem__(self,index):
return self.A_list[index]
if __name__ == "__main__":
a = Accumulator(4)
a.add(1,2,3,4,5)
print(a.A_list)
4、 完成一个斐波那契数生成函数 (生成器)
f = fib() 可以不断调用 next(f) 并不断返回下一个值
def fib():
a, b = 0, 1
while True:
yield b
a, b = b, a + b
if __name__=="__main__":
num=0
f = fib()
while(num<=10):
print(next(f))
num+=1
任务2:完成测试
任务3: 深度学习入门
由于时间问题,对深度学习的了解不多。就我浅薄的理解,深度学习大概是建立一个模型,将要训练的案例转化为特殊的数据类型:n维向量或叫张量(tensor),模型的处理结果大概是概率或基于概率得出的结论。不过模型是怎样得出结论的,这个过程目前好像还是黑箱操作?不可见的?
对于模型如何处理张量内包含的数据,以及“理解“”数据的方式,我有些费解。