【Python学习笔记】cs231nPython Numpy教程

【Python学习笔记】cs231nPython Numpy教程

回顾经典教程cs231n,完成assignments觉得很困难,感觉自己python基础语法掌握的不是很熟,就顺藤摸瓜找了cs231n他们的官方Python个Numpy教程

如果对英文原版上手有困难,可以看这个:
b站同济子豪兄中文讲解的cs231n:【子豪兄】精讲CS231N斯坦福计算机视觉公开课(2020最新)
作业相关解析:CS231N作业详解零基础版
cs231n官方笔记:贺完结!CS231n官方笔记授权翻译总集篇发布
cs231nPython、Numpy入门教程:Python Numpy Tutorial (with Jupyter and Colab)
我的学习历程是:英文原版理解困难——>b站中文解析——>课后作业练习困难——>b站作业讲解——>官方教程补python和Numpy基础
真是基础不牢,地动山摇。就是因为我对Numpy不够熟悉,平时主要使用C#,python代码写的也不够多,所以啃作业很头疼。先得慢慢把基础的学会。

for循环遍历字典时,默认情况遍历的是字典的键(key)
遍历值value:for animal in d.values()
同时遍历键和值:for animal, legs in d.items()

【Python学习笔记】cs231nPython Numpy教程_第1张图片
【Python学习笔记】cs231nPython Numpy教程_第2张图片【Python学习笔记】cs231nPython Numpy教程_第3张图片
存储不同数据类型——元组()、列表[]
存储相同数据类型——数组
无序——集合{}、字典{:},
有序——元组()、列表[]、数组

【Python学习笔记】cs231nPython Numpy教程_第4张图片
一段我第一次看没明白的程序:
【Python学习笔记】cs231nPython Numpy教程_第5张图片
字典是这样索引的
{(0,1):0}
{(1,2):1}
{(2,3):2}
{(3,4):3}
{(4,5):4}
{(5,6):5}
(5,6)这个整体作为键,对应的d[t]值也就是5
【Python学习笔记】cs231nPython Numpy教程_第6张图片
以及我觉得很别扭的self,之前做KNN作业的时候,被self.X_train迷惑了很久,想了半天这是哪来的变量
【Python学习笔记】cs231nPython Numpy教程_第7张图片【Python学习笔记】cs231nPython Numpy教程_第8张图片
【Python学习笔记】cs231nPython Numpy教程_第9张图片
然后查了一下,这个self是类比C#里面的this,
(似乎C#很多时候都不写this.X_train=X,直接把this省去了?我以前写代码的时候很少写到this,但是印象里个别地方,特别是变量和函数参数一个名字的时候,不写this就容易出错)
【Python学习笔记】cs231nPython Numpy教程_第10张图片
还有一点很不适应的地方,是python中的数组和C#也不太一样,C#里输入几个[][]就能定义的数组,到了python里面变复杂了
【Python学习笔记】cs231nPython Numpy教程_第11张图片【Python学习笔记】cs231nPython Numpy教程_第12张图片
我目前个人感觉python确实方便,但是很多时候太简略了,一个变量是从哪里开始定义并使用的我要找很久……C#全写在类开头,Awake()——OnEnable(0——Start()一套走下来很清晰,应该是我还没有完全上手Python的缘故。【Python学习笔记】cs231nPython Numpy教程_第13张图片一些快速创建数组的方法:np.zeros创建全0数组,np.ones创建全1数组,np.full创建一个给定大小和类型并且以指定数字全部填充的新数组,np.eye创建对角线全为1的单位矩阵【Python学习笔记】cs231nPython Numpy教程_第14张图片
【Python学习笔记】cs231nPython Numpy教程_第15张图片【Python学习笔记】cs231nPython Numpy教程_第16张图片
发现一个不错的帖子参考:
np.empty() and np.full()
【Python学习笔记】cs231nPython Numpy教程_第17张图片【Python学习笔记】cs231nPython Numpy教程_第18张图片

很奇怪为什么这里修改切出来的b,会影响a的值,查了以后发现切片相当于只是创建了一个视图,并没有复制一份a,所以修改子数组会在原数组的基础上进行修改。【Python学习笔记】cs231nPython Numpy教程_第19张图片
感觉这个视图和引用有点像,但视图不一定是原数据的全部
【Python学习笔记】cs231nPython Numpy教程_第20张图片【Python学习笔记】cs231nPython Numpy教程_第21张图片
想了很久为什么这里输出的是第二列
【Python学习笔记】cs231nPython Numpy教程_第22张图片【Python学习笔记】cs231nPython Numpy教程_第23张图片【Python学习笔记】cs231nPython Numpy教程_第24张图片【Python学习笔记】cs231nPython Numpy教程_第25张图片
我总记不得要把行列分开看,找半天发现没有这个元素【Python学习笔记】cs231nPython Numpy教程_第26张图片

折腾了一圈,还是print(a[a>2])最舒服【Python学习笔记】cs231nPython Numpy教程_第27张图片【Python学习笔记】cs231nPython Numpy教程_第28张图片
那如果我输入的数据类型和参数指定的数据类型不符,Numpy是报错还是自动转换呢?
【Python学习笔记】cs231nPython Numpy教程_第29张图片基本数学函数对数组进行元素操作,既可以作为运算符重载,也可以作为numpy模块中的函数:加减乘除都是对应项直接操作,也可以调用Numpy函数
在这里插入图片描述【Python学习笔记】cs231nPython Numpy教程_第30张图片注意,与MATLAB不同,是元素乘法,而不是矩阵乘法。相反,我们使用点函数来计算向量的内积,将向量与矩阵相乘,dot既可以作为numpy模块中的函数,也可以作为数组对象的实例方法:
这点和C#应该是一样的,之前计算敌人可视范围的时候,cos就用的dot函数计算
乘法就是直接对应元素相乘,(x1,y1)和(x2,y2)相乘是(x1x2,y1y2)
向量点乘是(x1x2+y1y2),得到一个值
【Python学习笔记】cs231nPython Numpy教程_第31张图片
这个地方是很容易糊涂【Python学习笔记】cs231nPython Numpy教程_第32张图片
矩阵和向量是每一行的x,y分别与向量相乘
[x1
v1+y1v2,x2v1+y2*v2]
【Python学习笔记】cs231nPython Numpy教程_第33张图片

最后那个矩阵乘法,是第一行x第一列——结果的第一个元素,第一行x第二列——结果的第二个元素
【Python学习笔记】cs231nPython Numpy教程_第34张图片
看看基础教程还是有必要的,好多函数的用法跟我一眼脑补的不一样
如果不仔细看看文档,我会以为axis=0的意思是把第一列的数据加起来,但其实是把纵向的每一行相加
【Python学习笔记】cs231nPython Numpy教程_第35张图片请注意,对秩(维度)为1的数组进行转置不会有任何作用
【Python学习笔记】cs231nPython Numpy教程_第36张图片

你可能感兴趣的:(python,numpy,学习)