这个编程系列我采用的方法是,照着老师课件一步步跟做,遇到问题就记录,能搜索解决就搜索解决,搜不到的去提问,尽量找到解答。
简书专栏里有非常完备的新手上路指南(从下载软件开始),我就不一步步搬运了。
这里主要是根据我在操作时出错的地方,从小白的角度做下总结,同时也分享入门路上的体验,希望能对你有点帮助。
NumPy入门
本文分三段,第一部分课程内容提取回顾,第二部分操作中问题总结,最后是心得。
一、内容提取
NumPy(Numerical Python)是高性能科学计算和数据分析的基础包,通俗点说,它是Python里已有的工具包,提前将各种功能打包好,形成不同的工具装在里面,需要的时候直接提取,用来数据分析即可(或许以后还有更多更强大的功能)。
就好像需要砸钉子的时候去拿锤子,需要拧螺丝的时候去拿螺丝刀, 『NumPy工具包』这个叫法可以说很形象了。
NumPy的一个重要对象是数组,操作都是针对数组进行。
一个数组里可以存一堆数据,每一次操作就可以针对批量数据进行,不需要挨个循环到每一个元素。
数组:
※ 一维数组类似于列表
大概长这样 […, …, …, …, …]
※ 二维数组类似于矩阵
大概长这样
[…,…,…
…,…,…]
对数组的操作:
※ 创建——举例🌰
np.zeros(5) 5个元素全0的数组
np.ones(5) 5个元素全1的数组
np.empty(10) 10个元素的空数组,会返回随机数
np.arrange(10) 元素从0到9的数组
np.arrange(启示值, 步长, 终值) 等差数列数组
np.random.rand(5) 5个[0,1)之间的随机数数组
np.random.randint(1, 10, size=8) 指定范围内的随机整数数组
np.zeros((2,3)) 两行三列0,以元组(2,3)为参数
np.random.rand(3, 5) 三行五列随机二维数组,直接以3,5为参数,不同于上
※ 索引切片——举例🌰
总的来说,使用[ ]进行操作。
一维数组切片举例:
arr[3:7] arr[3] 针对切片的修改会影响原来数组
arr[3:7].copy() 相当于生成一个切片的副本,针对副本的修改不会影响原来数组
二维数组切片举例:
mat[0] 取一行
mat[3][3] mat[3,3] 取第三行第三列某个元素
索引切片混用:
mat[0:3, 1] 0~2行,第1列
mat[2:, 2:] 第2行到最后,第2列到最后
布尔型索引
相当于建一串True和False的筛子作为索引,只有True对应的值能通过(印象深刻,值得琢磨)
※ 数组运算
总的来说采用一一对应操作,与矩阵计算不同。
可对一个二维数组操作,比如一个数组对一个数进行+ - * /运算。
也可在两个数组之间操作,两个数组之间+ - * /,对应元素直接运算,但要行列数一样。
np下的常用函数(工具包里常用工具):
np.sum() 数组求和
np.sum(数组名,axis=1) 对行求和
np.sum(数组名,axis=0) 对列求和
注:sum换成mean就以求每列的均值,换成max和min是求每列最大最小值
np.sort(数组名[:, 0] )对第0列排序,值从小到大
np.unique(数组名[:, 列索引]某列中不重复的数据
np.where(判断条件,True下的结果,False下的结果)对应不同条件,产生不同结果
二、问题总结:
1、一般开始之前使用 『import numpy as np』导入工具包,接下来的命令前要带上『np.』,说明是从这个工具包里取的工具。
2、出错的话,注意看error说明,^代表可能出问题的地方,可着重关注。
3、括号要成对!检查tips:将鼠标点在一个括号处,和它成对的括号就会变色。
4、凡是提到『第几行』,指的都是索引(0,1,2……),而非通常所说的行数(1,2,3……),因为审题不对做错了好几题🤣。。
5、做完作业对答案的时候,发现很多写了几行命令才实现的操作,其实用一条语句即可实现,比如以下这个简单的定义过程。
估计学得多了,最主要是用得多了,慢慢能掌握更多类似的简练语句。
三、心得:
本节课没有来及听完回放,最后的红酒例子那里只是照着课件敲了一遍,感觉还是跟听课不大一样。
听课之所以更有效,是因为有老师的思路,她会在一些地方给出恰当的解释和指导,这些貌似一带而过的一两句话,听进去了,就会立竿见影起效。对于一张白纸来说,多画一笔,就能更清晰一分,即便只是草图。
如果要靠自己去获取,可能得等到积累到一定程度,思考框架差不多也建立起来的时候,方能前后串起来,get到其中的一点真意。
所以,这次算是教训。
Python笔记系列(不只是笔记):