【Python学习笔记】cs231nPython Numpy教程

news2024/9/21 4:28:01

【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()

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
存储不同数据类型——元组()、列表[]
存储相同数据类型——数组
无序——集合{}、字典{:},
有序——元组()、列表[]、数组

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

很奇怪为什么这里修改切出来的b,会影响a的值,查了以后发现切片相当于只是创建了一个视图,并没有复制一份a,所以修改子数组会在原数组的基础上进行修改。在这里插入图片描述
感觉这个视图和引用有点像,但视图不一定是原数据的全部
在这里插入图片描述在这里插入图片描述
想了很久为什么这里输出的是第二列
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
我总记不得要把行列分开看,找半天发现没有这个元素在这里插入图片描述

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

最后那个矩阵乘法,是第一行x第一列——结果的第一个元素,第一行x第二列——结果的第二个元素
请添加图片描述
看看基础教程还是有必要的,好多函数的用法跟我一眼脑补的不一样
如果不仔细看看文档,我会以为axis=0的意思是把第一列的数据加起来,但其实是把纵向的每一行相加
在这里插入图片描述请注意,对秩(维度)为1的数组进行转置不会有任何作用
在这里插入图片描述
“广播

广播是一种强大的机制,允许numpy在执行算术运算时处理不同形状的数组。我们经常有一个较小的数组和一个较大的数组,并且我们希望多次使用较小的数组来对较大的数组执行一些操作。”
我接触过的C#里面的广播好像是用在观察者模式里面的,麦扣的教程中定义了IEndObserver接口,一旦玩家死亡,GameMangaer就通知所有实现接口的(敌人)对象,宣告玩家死亡,敌人胜利,播放胜利动画在这里插入图片描述
相当于用tile函数堆叠成一行对一个,然后分别相加
在这里插入图片描述Numpy广播允许我们在不实际创建v的多个副本的情况下执行此计算
所以这个广播的意思应该是,只需要一份数据,所有的都复用,广泛使用、传播的意思?而不是C#里面那种“通知”性质的广播
在这里插入图片描述在这里插入图片描述支持广播的功能被称为通用功能。您可以在文档中找到所有通用函数的列表。在这里插入图片描述
Python函数:np.reshape()在这里插入图片描述
结果确实是一样的,很神奇在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述类似的函数(scipy。spatial。distance。cdist)计算两组点上所有对之间的距离;您可以在文档中阅读相关内容。在这里插入图片描述在这里插入图片描述
Matplotlib是一个打印库。在本节中,简要介绍matplotlib.pyplot模块,该模块提供了一个类似于MATLAB的绘图系统。
matplotlib中最重要的功能是绘图,它允许您绘制二维数据,可以理解成Python的可视化库在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

子模块
您可以使用subplot函数在同一个图形中绘制不同的东西。以下是一个示例:在这里插入图片描述
相当于多张图组合到一起画在这里插入图片描述
在这里插入图片描述
img_tinted对图片重新着色在这里插入图片描述在这里插入图片描述
#imshow的一个小问题是,如果数据不是uint8,它可能会给出奇怪的结果。为了解决这个问题,我们在显示图像之前将其显式地投射到uint8。
np.uint8()
在这里插入图片描述

CS231n作业详解零基础版笔记:

b站讲解链接
装Anaconda的时候要打勾(我就没装成功过这玩意,Jupyter Notebook照样用……)
在这里插入图片描述
//这个整除容易出错,**幂是两个星号,%取模
这里-3对2取模也等于1
在这里插入图片描述在这里插入图片描述在这里插入图片描述
整除和取模和乘除优先级相同
在这里插入图片描述在这里插入图片描述在这里插入图片描述有的整数很长,需要更长的储存空间,int8不够装的话就需要int16、int32等。在这里插入图片描述字符串又有单引号,又有双引号:字符里面可能会把字符串用单引号引用起来
在这里插入图片描述如果单引号引用单引号,那就会报错,双引号引用双引号也会报错
可以双引号里面嵌套单引号,也可以反过来

在这里插入图片描述注注释:#和前面的代码空两格,和自己后面空一格开始写,比较漂亮
#会被电脑忽略,而且只对一行有效
在这里插入图片描述多行注释:6个单引号或者6个双引号,都是全英文在这里插入图片描述这图好好笑,注释要素过多的后果在这里插入图片描述在这里插入图片描述和数学函数一样,有输入,有映射,有输出+
参数的调用顺序很重要在这里插入图片描述多行注释的本质就是放了个字符串在这里在这里插入图片描述在这里插入图片描述None值用来判断(类似C#里面的if(null==xxxx?))在这里插入图片描述
Print函数没有返回值,是开函数(?听译的,但问了一下chatGPT,并没有这个术语)
在这里插入图片描述让a=print(-0.0261)的返回值,然后输出a,发现是None在这里插入图片描述输入很长的数字时,如果用了逗号分隔,python会把他认成三个数,语法正确,但是格式不规范,也不是原本想表达的含义在这里插入图片描述变量名可以包含中文,但是最好不要在这里插入图片描述Python关键字是这种绿色加粗字体显示的,相当于Python已经将这些词占用,不能使用这些作为变量名赋值在这里插入图片描述而这种紫色的@则是操作符,也不能使用
在这里插入图片描述在这里插入图片描述老师这讲的和我认知的不太一样,我记得驼峰命名法是attackTarget种大小写分割单词的写法,另一种写法是m_target,之前Unity架构课的老师经常用m_的这种。
搜了一下,我的理解是对的
在这里插入图片描述(赞美Unity架构课老师,很注意代码命名细节)
这个input很像C#里面的inputField,生成一个等待输入的输入框,此处通过print再显示出来
在这里插入图片描述在这里插入图片描述在这里插入图片描述除了有大于小于等于不等于以外,还有is not
在这里插入图片描述在这里插入图片描述Tab缩进,如果是空格缩进的话不知道用了几个,很容易出错
elif是else if的缩写在这里插入图片描述老师的条件判断执行时卡死了,是加了个else的情况,但实际应该不是else的问题,可以只写if和elif在这里插入图片描述If,elif这种是执行了一种情况就不会继续了,类似switch case,如果每个流程都需要判断,统一使用if在这里插入图片描述
如果加上else语句,整个判断模块至少会有一条被执行在这里插入图片描述
向量只有一个维度,后面就是空的
在这里插入图片描述在这里插入图片描述传入的矩阵大小还是个元组
在这里插入图片描述只有一个维度的时候,写不写括号和逗号都可以
在这里插入图片描述
Identity单位矩阵,zeros全0,ones全1
在这里插入图片描述可以通过现有的矩阵复制维度,创建新矩阵在这里插入图片描述在这里插入图片描述相当于[0,2)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述可以在创建矩阵的时候就指定数据类型在这里插入图片描述在这里插入图片描述在这里插入图片描述
借用一下老师画的图,很清晰易懂
在这里插入图片描述矩阵可以沿不同的轴向进行拼接在这里插入图片描述
转置矩阵:
在这里插入图片描述输入的参数也是元组在这里插入图片描述在这里插入图片描述逆转矩阵在这里插入图片描述在这里插入图片描述使用广播机制可以实现矩阵直接减去列向量,而不还用for循环
在这里插入图片描述在这里插入图片描述可以放回原矩阵去取值在这里插入图片描述多个条件并举一定要用小括号括起来
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述Figure相当于画板,axes/subplot相当于画板上面的画纸
python matplotlib中axes与axis的区别是什么?
教程传送门
在这里插入图片描述在这里插入图片描述在这里插入图片描述老师的例子里面有一个linspace函数:
python numpy 中linspace函数
教程传送门
在这里插入图片描述在这里插入图片描述需要注意避雷的问题:array改变,其复制值dup也会改变在这里插入图片描述使用切片办法,但不总是有用,虽然id不一样了,但是改变array还是一起改变了dup
在这里插入图片描述在这里插入图片描述直接“=”是浅拷贝,指向的位置都是同一个地方
在这里插入图片描述而deepcopy是复制了两份数据,其指向和id都不同了在这里插入图片描述Numpy自带也有copy拷贝函数
在这里插入图片描述三个有名的图像处理库:OpenCV、SkImage、PIL
这里因为out是img的浅拷贝,所以输出的时候原图也改变了在这里插入图片描述在这里插入图片描述
之前的img已经被破坏改色了,这里需要重新加载进来
在这里插入图片描述在这里插入图片描述在这里插入图片描述很多时候浅拷贝会出现一些莫名其妙的问题,建议常用深拷贝在这里插入图片描述排序默认是升序
在这里插入图片描述线性代数相关,已知Ax=b,求x在这里插入图片描述用Numpy内置函数可以直接实现最小二乘法
在这里插入图片描述在这里插入图片描述使用solve函数得到x在这里插入图片描述另一个求x的方法是梯度下降
Ax永远不等于Y,但可以让Y-Ax尽可能小,趋近于0,这样其损失(代价)loss越小越好
在这里插入图片描述X要加个“帽子”(xheight?/xhat?没听清楚)
要求最优解x,根据高数知识要求偏导数
在这里插入图片描述在这里插入图片描述已知dx,求梯度下降在这里插入图片描述
使用Numpy的原因:比python自带的速度快
在这里插入图片描述对于不太常用Python+Numpy编程的我来说,这个入门上手作业简直香,太有必要在做CS231n的作业之前先做CS131n打好基础了,不然直接冲CS231n根本无从下手。

CS131n入门作业:
导入本地文件里面,*表示所有函数
在这里插入图片描述
如果是下面这种,则是只导入一个函数
在这里插入图片描述
设置图片大小、最邻近插值、灰度图
%matplotlib Jupyter notebook特有的魔术命令
在这里插入图片描述
在这里插入图片描述
如果没有下面三行命令,修改了linalg.py和imageManip.py文件以后,需要重新run一下这一大段导入库、初始化的配置代码,但是有了这三行就不需要了,会自动重新加载。
在这里插入图片描述
第一题我用的中括号嵌套的方式做的定义矩阵在这里插入图片描述
老师看到了M矩阵的特殊性,1-12的连续数,用了linspace函数+reshape
在这里插入图片描述
像老师额外构造的一个c,他就是只有一个维度的向量,和a有区别
在这里插入图片描述
第二题老师用的a.dot(b),本质上和np.dot(a,b)是一样的
在这里插入图片描述在这里插入图片描述
很奇怪为什么我的结果是这样:有可能是向量没有转换为矩阵
在这里插入图片描述np.dot()使用方法
使用教程
np.dot()函数用法
使用教程
在这里插入图片描述
经过检查,发现是我第一题的a写成了向量而不是矩阵,导致后面出错
在这里插入图片描述
把a改成矩阵以后就正确了在这里插入图片描述
纠结了很久为什么不传参a的转置,而是直接传a,chatGPT回答说a这种只有一行的矩阵,转不转置没有区别
在这里插入图片描述在这里插入图片描述
第二题我比老师多调用了一层dot_product函数
正确答案:
在这里插入图片描述在这里插入图片描述

老师是计算了a和b的点积和M与a.T的点积之外就直接相乘了
在这里插入图片描述
题目的注意事项是所有的输入都必须是两个维度的,只有二维矩阵才能被转置,一维的不行
在这里插入图片描述
比如前面定义的这个c,转置与否是一样的效果
在这里插入图片描述
chatGPT这个写法也出错,目前我测试了的只有老师那种写法是对的在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
所以老师的方法相当于是矩阵先两两乘积然后再点积
a是一行三列矩阵,b是三行一列矩阵,a和b做矩阵乘法得到一行一列(1x1)的新矩阵
M是四行三列矩阵,a的转置是三行一列矩阵,M和a的转置做矩阵乘法得到四行一列(4x1)的新矩阵
最后把一行一列的新矩阵和四行一列的新矩阵做矩阵乘法得到四行一列的新矩阵
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧园区水电监测系统

随着人们对环保意识的提高,智慧园区的建设也越来越受到关注。其中,水电监测系统是智慧园区的一个重要组成部分。本文将从以下几个方面介绍智慧园区水电监测系统的特点和优势。 一、智慧园区水电监测系统的特点 1.实时监测:智慧园区水电监测系…

某医院网络故障分析案例

1、背景 某市第一医院用户反馈,近期内部业务系统出现访问慢的情况,这种情况严重影响到用户的体验和工作效率。 针对此问题,我们通过NetInside流量分析系统,提供实时和历史原始流量。重点针对网络异常流量跟踪分析,找…

go数据结构(二叉树的遍历)

用数组来存储二叉树如何遍历的呢? 如果父节点的数组下表是i,那么它的左孩子就是i * 2 1,右孩子就是 i * 2 2。 二叉树的遍历方式: 二叉树有三种基本遍历方式,分别是前序遍历、中序遍历和后序遍历。遍历的原理是从根…

Jenkins 流水线

采用Jenkins的自由风格构建的项目,适合用于测试和学习,主要问题有: 构建过程中整体流程是不可见的,无法确认每个流程花费的时间出现问题不方便快速的定位无法进行版本化管理多个任务中有很多步骤需要重复搭建 Jenkins的Pipeline…

MYSQL Row 752 was cut by GROUP_CONCAT()

因为group_concat有个最大长度的限制,GROUP_CONCAT函数返回的结果大小被MySQL默认限制为1024(字节)的长度。超过最大长度就会被截断掉 解决方法:更改配置文件,修改长度。 https://blog.csdn.net/zzddada/article/details/115082236 concat…

DHCP与RIP配置实验

目录 一、实验要求与拓扑结构 1、实验要求 2、提前规划好网段的拓扑结构如下图 二、实验步骤 1、给每台路由器的各个接口配置ip 2、给路由器AR1和AR3配置dhcp服务 3、在路由器AR1和AR2上运行ripv2,在AR3上运行ripv1 4、更改接口的rip协议版本 一、实验要求与…

chatglm-6b模型在windows的详细安装教程

1.先是看了github的文章(如果打不开这篇文章,可能需要科学上网,即访问外网的VPN): https://github.com/THUDM/ChatGLM-6B 2.准备:台式机,GPU是8G。(关于是否可以在笔记本运行&#x…

【网路】-- HTTP协议

目录 HTTP协议 认识URL urlencode和urldecode Http http的宏观结构 http请求报文格式 http响应报文格式 HTTP的方法 表单 重定向 HTTP常见Header 会话管理 Cookie 实验证明 Connection选项 工具推荐 Fiddler 原理 应用层:就是程序员基于socket接口…

如何在大厂做好架构演进?

1 架构演进的定义 1.1 定义 通过设计新的系统架构(4R),来应对业务和技术的发展变化。 1.2 关键点 新架构新的复杂度 1.3 目的 应对业务和技术的发展变化后带来新的复杂度。 案例 淘宝去IOE,是因为业务发展大了后,IOE的成本和可控性难…

51单片机入门

文章目录 一、安装keil5及proteus二、MCS-51单片机结构与原理(一).8051单片机基本组成(二).8051单片机引脚1.电源引脚2.时钟电路引脚3.控制信号引脚4.输入/输出端口 (三) 并行输入/输出端口结构 三、单片机cx51编程基础(一).变量定义(二).数据类型(三).存储类型(四).Cx51语言程…

【Python】逆向解析js代码

目录 1. 打开百度翻译网页,查找翻译结果的网络资源包 2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据 3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值 4. ctrl F 快捷键搜索sign值的网络资源包&#x…

自然语言处理:词嵌入简介

动动发财的小手,点个赞吧! Word Embeddings 机器学习模型“查看”数据的方式与我们(人类)的方式不同。例如,我们可以轻松理解“我看到一只猫”这一文本,但我们的模型却不能——它们需要特征向量。此类向量或…

MongoDB 聚合管道的集合关联($lookup)及合并($unionWith)

目前为止,我们已经介绍了一部分聚合管道中的管道参数: $match:文档过滤 $group:文档分组,并介绍了分组中的常用操作:$addToSet,$avg,$sum,$min,$max等。 $add…

python OCR识别验证码

1. 抓取网页验证码图像并保存 import lxml.html, urllib3# 使用urllib3抓取网页数据 http urllib3.PoolManager() html http.request(GET,site).data# 使用lxml解析网页数据 tree lxml.html.fromstring(html) # 解析HTML,补全不完整的格式 fixedhtml lxml.ht…

LeetCode:102. 二叉树的层序遍历

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 可以参考👉LeetCode:二叉树的前、中、后序遍历——如何创建一棵【二…

机器学习 特征工程

文章目录 一、数据预处理1. 缺失值处理1.1 删除1.2 统计值填充1.3 前后向值填充1.4 直接忽略1.5 模型预测 2. 异常值处理 二、特征提取1. 数值型特征提取1.1 标准化与缩放1.1.1标准化(Standardization)1.1.2 归一化(Normalization&#xff09…

STM32F4_定时器精讲(TIM)

目录 1. 什么是定时器? 2. STM32定时器简介 2.1 高级控制定时器 TIM1和TIM8 2.1.1 TIM1和TIM8简介 2.1.2 时基单元 2.1.3 计数器模式 2.1.4 重复计数器 2.1.5 时钟选择 2.1.6 捕获/比较通道 2.1.7 输入捕获模式 2.1.8 其他功能 2.2 通用定时器 TIM2到TI…

算法----删点成林

题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组…

2023年天梯赛模拟赛

//能力有限&#xff0c;只展示一百分代码。前八个题一般是原题&#xff0c;所以不展示题目。 L1-1 嫑废话上代码 #include<bits/stdc.h> using namespace std; int main(){cout<<"Talk is cheap. Show me the code.";return 0; } L1-2 九牛一毛 这是…

Leetcode每日一题——“移除元素”

各位CSDN的uu们你们好呀&#xff0c;小雅兰又来啦&#xff0c;今天&#xff0c;小雅兰的内容是移除元素&#xff0c;下面&#xff0c;让我们进入Leetcode的世界吧 说明: 为什么返回数值是整数&#xff0c;但输出的答案是数组呢? 请注意&#xff0c;输入数组是以「引用」方式…