第三次考核总结

超算第三次考核

任务一:

(1)列表生成式:

主要运用到推导式的内容。

list1 = [i for i in range(10,61,10)]
print(list1)
list2 = [i*i for i in range(1,8)]
print(list2)
list3 = [i*int((-1)**(i/10))*-1 for i in range(10,61,10)]
print(list3)
list4 = [i for i in range(10,61,10) if i%20 != 0]
print(list4)

#运行结果
#[10, 20, 30, 40, 50, 60]
#[1, 4, 9, 16, 25, 36, 49]
#[10, -20, 30, -40, 50, -60]
#[10, 30, 50]

一行内生成乘法表:

print("\n".join("\t".join(["{}*{}={}".format(j,i,i*j) for j in range(1,i+1)])for i in range(1,10)))

该行代码用了join函数,里层的join在每个算式后加上制表符分割开算式,外层join在每次应该换行的时候加入一个换行符,具体表现为i每加一换行一次。

除了上述之外,还有下面这个方法。

[print("{}*{}={}".format(j,i,i*j) ,end = "\n" if i == j else "\t")for i in range(1,10) for j in range(1,i+1)]

该行代码运用print函数的end和三元运算符,来控制到底是换行还是输出制表符。

(2)计时器对象:
import time as t
class Timer:
    def __init__(self):
        self.timelist = []

    def start(self):
        self.begin = t.perf_counter()

    def stop(self):
        self.end = t.perf_counter()
        self.timelist.append(self.end-self.begin)
        return self.timelist[-1]

    def avg(self):
        sum = self.sum()
        return sum / len(self.timelist)

    def sum(self):
        sum = 0
        for i in self.timelist:
            sum += i
        return sum

    def cumsum(self):
        cumsumlist = []
        for i in self.timelist:
            if cumsumlist:
                cumsumlist.append(i+cumsumlist[-1])
            else:
                cumsumlist.append(i)
        return cumsumlist

a = b = 1
timer = Timer()
timer.start()
d = a + b
print(f'{timer.stop():.5f} sec')
#输出
#0.00003 sec

完成计时器对象需要调用time库,库中有几个可用于计时的函数。

1.time.time()

返回自1970年1月1日00:00:00(UTC)以来经过的时间,单位为秒。可调用两次求差值,来计算时间差。通过改变系统时间可以改变time.time()的值。因为精度不高而且会受系统时间影响,所以适合用来表示日期时间或者大程序程序的计时。(包含sleep()的时间)

2.time.process_time()

返回当前进程的系统和用户CPU时间之和(以小数秒为单位)。不包含睡眠时间,也是通过调用两次求差值计算经过时间。精度比time.time()高。

3.time.perf_counter()

返回性能计数器的值(以小数秒为单位),包含睡眠时间,调用也和上述两种方法一样,但是精度更高,在计算小程序的运行时间使用perf_counter可以获得更加准确的时间差,所以我这里使用time.perf_counter()。

此外还有time.clock()方法,但是在python3.8之后废除了,所以用以上三种方法代替。

同时python还提供了精确到纳秒的计时方法(返回的是整型。):

time.time_ns()

time.process_time_ns()

time.perf_counter_ns()

(3)累加器 Accumulator 类
class Accumulator:
    def __init__(self,n):
        self.list = [0] * n

    def add(self, *args):
        j = 0
        for i in args:
            self.list[j] += i
            j += 1

    def reset(self):
        self.list = [0] * len(self.list)

    def  __getitem__(self, idex):
        return self.list[idex]

通过输入的n来创建列表,来完成累加。

(4)斐波那契数生成函数
def fib():
    f1 = 1
    f2 = 1
    yield print(f1)
    while True:
        f3 = f1 + f2
        f1 = f2
        f2 = f3
        yield print(f1)
a = fib()
for i in range(5):
    next(a)
#输出
'''
1
1
2
3
5
'''

该段代码主要运用到yield方法。yield方法可以看作函数中的return,含有yield的函数也不在是一个简单的函数,它变成了一个生成器,当生成一个函数对象时,先不会执行函数内容,而是先产生生成器。

该生成器含有一个函数next(),当调用next()时将执行函数返回yield后面的值。每次调用next()都从上一次返回后的位置开始执行。

简单来说,yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

任务二:

任务三:

对于任务三,主要是看李沐动手学深度学习的视频配合快速入门Pytorch,简单的了解一些:数据操作、数据预处理、线性代数以及矩阵导数的内容,还有线性回归模型相关内容。

老师的视频大部分还是挺细致的,但光看视频还是有一些不太清楚的地方,比如,数学方面:线性回归模型的代价函数为什么是凸函数,正向累积和反向累积的区别,什么是累积梯度; 还有对老师在视频中一些没有详细介绍的一些库函数,不是很了解,如:os库,panda库·,以及torch库中的一些函数,这些都还需要多多查找资料进行学习。

posted @ 2023-02-18 00:44  牛鱼针  阅读(34)  评论(0)    收藏  举报