numpy学习笔记(1)


学过python的人应该都接触过numpy这个有名的第三方库,它是一个支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

1.安装numpy

安装方法有两种:

  • pip安装:直接在命令行里键入pip install numpy即可,如果遇到安装速度过慢的情况,可以考虑到清华镜像源下载安装。
  • conda安装,在anaconda powershell里输入conda install numpy,速度慢也可以换源。
    我这里已经安装好了,显示如下:

    打开idle验证一下安装是否成功:
    >>> import numpy as np
    >>> np.__version__#打印版本信息
    '1.16.5'
    >>> np.ones(5)#生成值全为1的数组
    array([1., 1., 1., 1., 1.])
    
    正确生成了数组,说明numpy安装成功

    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.onesnp.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,该函数有startstopnumendpointbase五个参数,

参数 描述
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 位浮点数(实数部分和虚数部分)

文章作者: Reset Ran
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Reset Ran !
  目录