学过python的人应该都接触过numpy这个有名的第三方库,它是一个支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
1.安装numpy
安装方法有两种:
- pip安装:直接在命令行里键入
pip install numpy
即可,如果遇到安装速度过慢的情况,可以考虑到清华镜像源下载安装。 - conda安装,在anaconda powershell里输入
conda install numpy
,速度慢也可以换源。
我这里已经安装好了,显示如下:
打开idle验证一下安装是否成功:
正确生成了数组,说明numpy安装成功>>> import numpy as np >>> np.__version__#打印版本信息 '1.16.5' >>> np.ones(5)#生成值全为1的数组 array([1., 1., 1., 1., 1.])
2. 基础操作
2.1通过维度创建数组
先看由指定维度来创建数组的方法:
>>> a=np.array([1,2,3])#创建一维数组
>>> a
array([1, 2, 3])
>>> b=np.array([[1,2,3],[4,5,6]])#创建二维数组,高维度同理
>>> b
array([[1, 2, 3],
[4, 5, 6]])
>>> np.zeros([3,3])#生成指定维度的值全为0的数组
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
>>> np.ones([3,3])##生成指定维度的值全为1的数组
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> np.empty([3,3])#生成指定维度的值为随机数的数组
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> np.empty_like(b)#生成和b数组同维度的值为随机数的数组
array([[0, 0, 0],
[0, 0, 0]])
在实际操作中,通过生成a,b数组的方式来创建高维度数组时会显得很麻烦,所以一般使用np.ones
或np.zeros
来生成指定维度的数组,然后对其中的元素进行修改。
2.2通过数值范围创建数组
2.2.1等差数列
有时候,我们需要通过数值范围来创建数组,比如现在需要一个从1到100的公差为2的等差数列,通过前面的方法也可以创建(先生成指定维度的0数组,再利用循环进行赋值),这样会显得比较繁琐,可以使用arange
函数:
#以生成1到20的公差为2的等差数列为例
>>> np.arange(1,20,2)#
array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19])
>>> np.arange(start=1,stop=20,step=2)#详细写法
array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19])
>>> np.arange(1,20,1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19])
arange
函数中需要三个参数,依次是起始点、终止点和步长,可以看出:即使步长设置为1,输出的数组也是不包括终止点的,所以arange
函数的输入可以看做一个左闭右开区间,如果想要包括终止点,可以让终止点增大一个步长。
除了arange
函数,还有一个linspace
函数也可以生成等差数列:
#以生成1到10的公差为1的等差数列为例
>>> np.linspace(1,10,10)
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
>>> np.linspace(start=1,stop=10,num=10)#详细写法
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
>>> np.linspace(1,10,10,endpoint=False)
array([1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1])
linspace
函数中需要至少三个参数,依次为起始点、终止点和要生成的等间距点的数量,还有一个可选参数endpoint
,它的默认值为True
,表示默认包括终止点,此时可将输入理解为一个闭区间,将其设置为False
后,输入又变成了一个左闭右开区间。
2.2.2等比数列
numpy
同样有函数来创建满足需要的等比数列,函数名字叫logspace
,该函数有start
、stop
、num
、endpoint
、base
五个参数,
参数 | 描述 |
---|---|
start | 表示所生成数列的起始值为${base}^{start}$ |
stop | 表示所生成数列的终止值为$base^{stop}$ |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 True 时,数列中中包含$base^{stop}$ 值,反之不包含,默认是True。 |
base | 对数 log 的底数,默认值为10 |
实例如下:
#生成1到10000的等差数列
>>> np.logspace(0,4,5)
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04])
>>> np.logspace(0,4,5,endpoint=False)
array([1.00000000e+00, 6.30957344e+00, 3.98107171e+01, 2.51188643e+02,
1.58489319e+03]
#生成1到128的等差数列
>>> np.logspace(0,7,8,base=2)
array([ 1., 2., 4., 8., 16., 32., 64., 128.])
2.3数据类型
在上述的各种函数中,其实都还有一个参数,名字为dtype
,它可以用来指定数组中元素的类型,举一个例子:
>>> c=np.array([1,2,3,4])
>>> c
array([1, 2, 3, 4])
>>> c.dtype
dtype('int32')
>>> d=np.array([1,2,3,4],dtype='float32')
>>> d
array([1., 2., 3., 4.], dtype=float32)
这里再附上numpy里的数据类型表(转载于菜鸟教程):
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |