学习痛苦啊,今天学,明天丢。这种天气,还是睡觉最舒服了。
咱说归说,闹归闹,但还是得学才行啊。
之前在学习的过程中一直都有记录笔记的习惯,但笔记质量可不敢恭维,大多都未曾整理,不过拿来复习倒是个不错的选择。
自打接触Python以来,写的最多的就是爬虫了,什么网络小说啊,虚拟游戏币啊,考试题库啊之类的都有写过,也帮别人爬过不少网站公开数据。之前也整理过一篇爬虫相关的文章(太懒了,才一篇,之后有机会有时间,再整理出来吧):
再之后的话,就对Social Engineering产生了一定的兴趣,或许需要能言善辩,巧舌如簧,达到“江湖骗子”的等级,才能玩转社会工程学吧。之前也写过一篇Web渗透相关的文章:。
这里还是有必要提醒一下大家,对于一些不信任的人或信息,如果你会一些网络安全相关技能,可以当做一次渗透经验,否则的话,最好的处理方式是置之不理,别让你的好奇心成为坠入深渊的开始,尤其是在这云龙混杂的虚拟网络世界中。就在前几天,警方还破获了全国最大网络 luo liao 敲诈案呢,受害者达10余万人,涉案金额也有XXXXXXXXXXXXXXX,大家还是需要注意的。
反正,学的东西很多、很杂,学的也不精,记录的笔记也很少回过头复习。工欲善其事,必先利其器,这不开始系统性学习机器学习么,所以想把之前记录的Numpy、Pandas、Matplotlib“三剑客”笔记重新整理一下,也算是做一个回顾。
后期的话,会学习一些机器学习算法,主要参考《机器学习实战 / Machine Learning in Action》和周志华老师的《机器学习》西瓜书,以及其他一些圈内大佬写的一些技术文章。能手撕的话尽量手撕,不能手撕只能说明自己还有待提高吧。
Flag立的太多,感觉会被啪啪打脸。没事,慢慢来吧,打脸也不怕,反正皮糙肉厚 ( ̄_, ̄ )
这篇文章先把NumPy整理出来吧,可能记录的并不全面,只记录了一些常用的,其他的话后期用到了再进行更新吧。以下内容主要参考菜鸟教程和NumPy官方文档:
NumPy菜鸟教程:https://www.runoob.com/numpy/numpy-tutorial.html
NumPy官方文档:https://numpy.org/doc/stable/user/quickstart.html
关于NumPy的安装,前面在介绍深度学习环境搭建的时候已经介绍过了,推荐安装Anaconda,其内部集成了大量第三方工具模块,而不需要手动 pip install ...,这一点就有点像Java中的Maven。Anaconda可参考:
如果您没有安装Anaconda那也没事,只需要在Python环境下执行以下命令安装NumPy即可:
> pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple以下内容采用的NumPy的版本为:1.18.1
In [1]: import numpy as np In [2]: np.__version__ Out[2]: '1.18.1'在NumPy中,操作的对象大多为ndarray类型,也可称其别名为array,我们可以把它看做矩阵或向量。
创建np.ndarray对象有多种方式,NumPy中也有多个api可供调用,比如我们可以通过如下方式创建一个指定的ndarray对象:
In [7]: temp_array = np.array([[1, 2, 3], [4, 5, 6]], dtype = np.int32) In [8]: temp_array Out[8]: array([[1, 2, 3], [4, 5, 6]]) In [9]: type(temp_array) Out[9]: numpy.ndarray # 输出的类型为ndarray当然了,也可以调用arange,然后对其进行reshape操作来改变其形状,将向量转换成2x3的矩阵形式,此时的对象类型依然是numpy.ndarray:
In [14]: temp_array = np.arange(1, 7).reshape(2, 3) # arange产生向量,reshape改变形状,转化成矩阵 In [15]: temp_array Out[15]: array([[1, 2, 3], [4, 5, 6]]) In [16]: type(temp_array) # 输出的类型依然是ndarray Out[16]: numpy.ndarray由上,我们可以发现,无论通过什么方式(其他方式后期会有介绍)来创建对象,NumPy操作的都是ndarray类型,且该类型对象中主要包含以下属性:
ndarray.ndim:表示ndarray的轴数,也可理解成维度,或者可以通俗的理解成外层中括号的数量。比如[1, 2, 3]的ndim就是1,[[1], [2], [3]]的ndim等于2,[[[1]], [[2]], [[3]]]的ndim等于3(注意观察外层中括号的数量)
ndarray.shape:表示ndarray的形状,输出的是一个元组。该ndarray有n行m列,那输出的就是(n, m),比如[[1], [2], [3]]输出的是(3, 1),[[[1]], [[2]], [[3]]]输出的是(3, 1, 1),[[[1, 2]], [[3, 4]]]输出的是(2, 1, 2)。通过上述3个例子,可以发现shape是按照从外至内的顺序来表示的
ndarray.size:这个比较容易理解,表示的就是ndarray内部元素的总个数,也就是shape的乘积
ndarray.dtype:表示ndarray内部元素的数据类型,常见的有numpy.int32、numpy.int64、numpy.float32、numpy.float64等
以上就是ndarray中常见的一些属性,注意:只是部分,并非全部,其他属性可参考官方文档
我们可以通过以下列子来观察下ndarray的各个属性,以及其内部的属性应该如何修改:
以上例子中涉及到的np.expand_dims和np.astype会在后面进行介绍。