第四课:本课内容:•0. 导入 NumPy 包
•1. 创建 NumPy 数组
•2. 索引和切片
•3. 读取文件
•4. 布尔型索引
•5. 数组的运算
•6. 常用函数举例
NumPy 是 Numerical Python 的简称,是 Python 科学计算的核心包,也是高性能科学计算和数据分析的基础包。
numpy特性:具备功能非常强大的多维数组
具备对整个数组进行快速运算的函数
线性代数计算 随机数生成
可集成C/C++以及Fortran等语言
Numpy数组中的元素只能是同一种数据类型
Numpy数组的运算,更简洁且高效。
0. 导入 NumPy 包
导入Numpy包
用as语句倒入numpy包,后面用简写的 np ,就可以使用了。
1. 创建 NumPy 数组
numpy的一个重要对象(object)是 ndarray, 也称 NumPy 数组•ndarray 是 Multidimensional Array的缩写,中文称为多(multi)维(dimensional)数组(array)。
•数组可以存储大量数据并在其进行数学运算,我们可以使用数组在一块数据上进行操作从而避免使用循环来操作单个元素。
1-1 一维数组
一维数组
In[ 2 ] 中是把1,2,3这个列表转换成一维数组。赋值定义成 “ arr1d ”。
In[ 3 ] 区分赋值的 “ arr1d ” 类型,返回结果是一个Numpy类型的数组。
In[ 4 ] 返回值是1,代表是一个一维数组。
1-2 二维数组
二维数组
上图是把一个二维列表转换成一个二维数组,用和一维数组一样的方法。
二维数组就类似一个矩阵•0轴 (axis=0) 是列,也就是垂直方向
•1轴 (axis=1) 是行,也就是水平方向
•矩阵对于数据分析来说,是一个重要的概念,一般用列来代表观测对象的各种属性、特征,用行来记录每一个观测对象的一组测量数据
此时文科生觉得,这不是和我大学上的线性代数长得一毛一样吗好像有点懂了~~
二维数组
看来Numpy中,是用 ndim 来找出数组是多少维的。第7行是可以显示整个数组的行和列是多少。能够想象可以使用的地方就是那些超级长超级宽的一堆数组里面,做一些统计之前可以先看看整个数组有多巨大,或者通过这样的定义,让后面的数据统计可以更加方便。
这里还是要说说我的看法,往往在学习一样新的东西时,开始打基础的过程挺漫长挺难熬的,毕竟几乎都是以前没有接触过的新词汇,理解了一个新的,可能昨天记下的就忘记了。这样反复发过程经常都会怀疑人生:“我他妈学这破玩意干什么?!!”
然后又成功从入门到放弃。
所以我在学习的过程之中,尽量多地去想,它能够在什么地方可以使用,使用场景是什么,要是去用的话怎么用,可以发挥什么作用。我们这些功利的人类啊,往往在这样脑补的情况下,加重了它们的重要性,于是觉得自己应该继续学下去,可以让后面的工作加快一点。催眠自己,有时候挺管用的
1-3 其他快速创建数组的函数
•一维数组
一维数组
老师说,上面这几个例子都太简单了,然后就一掠而过了看起来好像比较简单,能够理解。就是不知道为什么要弄未初始化的垃圾值,我告诉自己不要陷进“垃圾值”这个词里面尝试理解为什么叫做垃圾值,但是无法停止这个大脑不去想啊!
一维数组
arange是range函数的数组版,输出的值从0到9,不包括10,共十个数字。注意这里的括号,先用方括号括里面,然后外面是圆括号。我的理解是里面类似数列一样的一排元素,外面的圆括号是为了迎合数组里array这个函数,显示这组数组是array的人。
上面的11是显示一排范围内的值,而12是在一个范围内的值里面挑出满足条件的元素出来,形成一个新的数列。这个条件就是:从2开始(包括2)开始算起,每个值从2开始加2,到10(不包括10)结束。其实也就是从2到10 的偶数数列。这个公式是这样的:
np.arange(起始值,终值(不包含终值),步长)
一维数组的随机数
创建0到1点随机数,请注意0左边是方括号,1右边是圆括号(我也不知道为什么要注意就是看出来是不一样的,但是不知道为什么要有区别)
13这个例子上课的时候我就有点迷惑,难道电脑随机出来的小数点后位数都是一致的吗?看起来太整齐了,都是8位数啊!凭什么就是8?
14这个例子老师直接跳过了。。。没看懂哦,1到10的随机整数,后面的size=8 是啥?
•二维数组
二维数组
一维数组和二维数组的区别就是行数的区别,一维的是1行,二维的是N行。
一维数组创建全0数组的语法是:
np.zeros(5)
创建一个5个0的数组;二维数组中,创建一个全0数组,语法也是一样的,只不过这里是需要设定行和列,2行3列的:
np.zeros ( (2,3) )
我又要说,注意括号了。两个圆括号。
上课的时候小伙伴问随机数组有什么用,我当时想的是:抽奖啊!像转发微博中经常会用到公证的第三方来显示公平公正公开,我猜测抽奖用的工具就是类似这样的程序。只不过别人设定的是整数的,我们上课的例子是有8位小数点的。
• 索引和切片的混用
方括号第一个参数指定要取的行位置,第二个参数指定要取得列位置,中间使用逗号隔开.一维数组:使用[ ]运算符,类似于Python列表。
二维数组:方括号中第一个参数对应行,第二个参数对应行,中间用逗号隔开。
数组切片是原始数组的视图,也就是说数据不会被复制,任何修改都会影响到原有的数组上。
一维数组与一维数组的索引:
一维数组
一维数组 切片:
一维数组
更改数组切片后:
一维数组的切片更改
这个例子就是上面灰色区域说的 “数组切片是原始数组的视图,也就是说数据不会被复制,任何修改都会影响到原有的数组上。” 后面我们对数组进行的任何修改,都会更新此数组。它们是墙头草。。。谁最新就往哪边倒
而有时候我们是需要更改数据,但是又想在后面的操作继续使用原始数据,也就是,在不更改原始数据的基础上,修改数组中的元素。这个听起来挺像word文档里面的 “另保存” 的。这个时候我们需要用到 .copy() 这个语法。
数组的新建“另保存”
一个都没少的原始数组们。而重新赋值的 arr3 是这样的:
修改数组
二维数组的索引和切片:
二维数组
和一维数组不一样的,首先就是前缀,这里是用 mat ,一维数组是用 arr ;
二维数组有一个一维数组没有的 shape,来定义限制整个数组的行和列。
获取二维数组的某一行:▪mat[起始行:终结行] :从起始行开始,但不包括终结行
▪mat[起始行:] : 从起始行到最后一行
▪mat[: 终结行] : 从第0行到终结行但不包括终结行
获取二维数组的某一行
方括号包裹元素,获取第0行。
获取二维数组的行
还是方括号,获取1-3行,不包括第三行。
•获取二维数组的行和列
•查看某一个元素,有两种方式:
这里的例子还是这个4*4的表格:
例子原始数据
查找第1行第3列的元素,2种方法
查找0-3行,第1列的内容
二维数组的切片
数字后面加冒号表示 从这个数字开始,直到这个数组的世界尽头!
作业4-1:生成一个3行5列的数组,元素值从1到15排列
1 ,取出其中的第1行,第3列元素
2 ,取出其中的第2行到最后一行
3, 取出其中的第1行到第2行,第1列到最后一列
4 ,取出其中的第0行和第2行,第三列
我第一次觉得作业那么顺畅!!!!竟然都做出来了,证明这作业不难!☺️
你们看完这课程内容应该也能顺利做出来的,因为老师布置的作业几乎是把答案写在题目上了,想要把第0行当作第1行都没办法犯错。
试试吧。
我做的如下,大家看看我有没有出错吧~
作业
剩余第四课的内容:导入 NumPy 包/创建 NumPy 数组/索引和切片•3. 读取文件
•4. 布尔型索引
•5. 数组的运算
•6. 常用函数举例
明天继续码第四课剩余内容哟~