入门numpy(上)【解读numpy官方文档】
(点击上方Python爱好者社区,可快速关注)
作者:王大伟
博客专栏:https://www.hellobi.com/u/wangdawei/articles
Python爱好者社区 唯一小编
前言
之前连载了pandas,pandas作为python做数据分析的一大利器,相信大家都不陌生。
当然连载部分作为入门是够了,具体提升还要大家多看看官方文档详细内容和做具体项目案例
之后我也会出一些pandas的数据分析实战案例分享给大家。
在询问了大家的意见和建议(怎么说的这么官方,不是我的风格啊)之后
我决定解读一下numpy的官方文档(入门部分)
让大家能够快速上手numpy
首先,我们看看官方是怎么介绍numpy的:
'''
NumPy是使用Python进行科学计算的基础软件包。 它包含以下内容:
(1)一个强大的N维数组对象
(2)复杂(广播)功能
(3)用于集成C / C ++和Fortran代码的工具
(4)非常有用的线性代数,傅里叶变换和随机数操作
(5)除了其明显的科学用途,NumPy也可以用作通用数据的高效多维容器。 可以定义任意数据类型。 这使NumPy能够无缝地,快速地与各种数据库集成。
'''
可能大家对"广播"一词不太了解,广播的意思可以这样理解,当我有两个维度不一样的array(数组)运算时,我可以用低维的数组复制成高维数组参与运算(因为运算要符合一定结构)
numpy官方网站:http://www.numpy.org/
开始numpy之旅
如果你是一个python初学者,我不建议你直接去python官网下载python3.X或是python2.7版本
我推荐你直接去anaconda官网下载对应版本的anaconda(建议下载最新的3.X版本)
下载地址:
https://www.continuum.io/downloads
如果你是windows用户,直接进入官网下载下图的即可
为什么推荐anaconda呢?
因为anaconda是python的集成环境,自带了很多python的库(或者认为是包)
举个栗子:
如果Python是一个光杆司令的话,anaconda则是一个司令带着一堆军队
so,你应该知道为什么我推荐你装anaconda了吧
如果你已经装了原生python并且用了挺久,也pip install 了很多库,类似numpy,scipy,pandas
那么你一定遇到很多报错,恭喜你,你已经才过了很多坑啦~就像我一样
有趣的是:
python是巨蟒的意思
anaconda是水蟒的意思
如果你在pip install numpy中由于网速慢安装报错,你可以来这里下载然后本地安装numpy
https://pypi.python.org/pypi/numpy#downloads
numpy快速入门官方文档:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
环境
python3.X
一颗栗子
import numpy as np
如果没报错,恭喜你,numpy安装完成
这里是把numpy命名为np
可以说是行业潜规则,当然是为了之后写代码简写方便
a = np.arange(15).reshape(3, 5)
a
注:这里的array(数组)是numpy中特有的类型,首先,使用np.arange(15)产生了一个一维数组,从0-14(注意范围)
arange不是arrange,arange是numpy的方法,所以写为np.arange()
然后,使用reshape()方法将这个产生的数组重新造型为3行5列的二维数组,也就有了上图的样子。
a.shape
注:查看数组格式,显示三行五列
a.ndim
注:显示数组的维数
如果你想知道这个方法的含义,可以在jupyter notebook (装完anaconda自带的ide编辑器)里输入:
?np.dim
还有举例子帮你理解呢~
a.dtype.name
注:a数组中的数值类型
a.itemsize
注:每个数组元素的字节大小
a.size
注:a数组中的元素个数
type(a)
注:a的类型
b = np.array([6, 7, 8])
b
注:当然,你可以直接通过直接赋值创建一个数组
type(b)
创建数组
使用array方法直接通过list(列表)创建数组
import numpy as np
a = np.array([2,3,4])
a
a.dtype
b = np.array([1.2, 3.5, 5.1])
b.dtype
注:可以创建整形和浮点型元素的数组
常见错误:没有经过list直接用数列创建数组
b = np.array([(1.5,2,3), (4,5,6)])
b
注:创建二维数组
当然,创建数组的时候,也可以指明类型:
c = np.array( [ [1,2], [3,4] ], dtype=complex )
c
注:这里指定的是复数类型
np.zeros( (3,4) )
注:创建全零数组,默认为float64形式
np.ones( (2,3,4), dtype=np.int16 )
注:创建一个三维全1的数组,并且创建时指定类型
你可以认为是一个长方体里有序的充满了1
观察括号,有层次的
np.empty( (2,3) )
注:创建一个二维的空数组,电脑不同导致显示不同
使用arange创建array
np.arange( 10, 30, 5 )
注:产生一个起始值为10,终止值为30(注意,终止值取不到),步长为5的数组
有点像c语言中的for循环格式
np.arange( 0, 2, 0.3 )
注:这里想说它接受float的值,不仅仅是int类型的值
当使用浮点参数时,由于有限的浮点精度,通常不可能预测获得的元素的数量。
因此,通常最好使用函数linspace来接收我们想要的元素的数量作为参数,而不是使用步长参数:
from numpy import pi
np.linspace( 0, 2, 9 )
注:产生0到2之间等间距(步长)的9个元素的数组,linspace和matlab中的用法一样
x = np.linspace( 0, 2*pi, 100 )
f = np.sin(x)
f
注:在之前import了pi(π),现在相当于在0~2pi之间产生100个均匀的数字作为x
然后通过sin(x)算出对应的y,部分结果如下:
更详细的操作可以在这里看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
就是下图这里,链接太多,就不一个个弄出来了
显示数组
a = np.arange(6)
print(a)
注:打印一维数组
b = np.arange(12).reshape(4,3)
print(b)
注:打印二维数组
c = np.arange(24).reshape(2,3,4)
print(c)
注:打印三维数组
更多reshape方法可以看这里:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#quickstart-shape-manipulation
如果数组太大而无法全部打印,NumPy会自动跳过中央部分,只能打印出边界部分(首尾):
print(np.arange(10000))
print(np.arange(10000).reshape(100,100))
要禁用此省略并强制NumPy打印整个数组,您可以使用set_printoptions更改打印选项。
np.set_printoptions(threshold='nan')
基本操作
a = np.array( [20,30,40,50] )
b = np.arange( 4 )
b
c = a-b
c
注:数组相减
b**2
注:b数组中每个元素平方
10*np.sin(a)
注:a数组先进行sin运算,然后结果乘10
a<35
注:对a数组中每个元素和35进行比较大小,返回的是一个充满布尔元素的数组
数组的矩阵乘法和对应元素乘积方法:
原理参考线性代数
A = np.array( [[1,1],
[0,1]] )
B = np.array( [[2,0],
[3,4]] )
注:创建两个数组(矩阵)
A*B
注:对应元素相乘
A.dot(B)
注:A左乘B,也可以写成如下形式:
np.dot(A, B)
结果一样的
A左乘B 和 B左乘A是不一样的,详见线性代数课本
某些操作(例如+ =和* =)将作用于修改现有数组而不是创建新的数组:
a = np.ones((2,3), dtype=int)
b = np.random.random((2,3))
a *= 3
a
注:创建一个2行3列全是元素1的数组a,然后将a的元素都乘3
小插曲:
(1)
num = 1
num = num + 1
num
(2)
num = 1
num += 1
num
初学者可以认为以上两种一样的意思,其实不一样,等你自己慢慢去挖掘。
同理以下也是:
num -= 1
num *= 1
num /= 1
回到正题:
b += a
b
相当于b = b+a
注:这里要说的是以上操作是修改现有数组而不是创建新的数组!!!
所以有时候尽量先备份一个
易错点:
这里a是int类型,b是float类型:
运算时,一般是可以默认自动从int到float转换(从简单到复杂)
而你的a = a+b相当于将float转为int,所以报错了
未完待续~近期更新~谢谢观赏~希望对你学习有帮助~
关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注