NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由SEO靠我 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NuSEO靠我mPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
一个强大的N维数组对象 ndarray广播功能函数整合 C/C++/FoSEO靠我rtran 代码的工具线性代数、傅里叶变换、随机数生成等功能--user 选项可以设置只安装在SEO靠我当前的用户下,而不是写入到系统目录。
默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以:
pip3 install numpy scipy matplotlib -i https://pypi.tSEO靠我una.tsinghua.edu.cn/simpleNumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型SEO靠我数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:SEO靠我
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或 dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组,表示各维度大小的元组。
一个跨度元组(stride),SEO靠我其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
numpy.array(object, dtype = None, copy = True, order = None, subok SEO靠我= False, ndmin = 0)NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维SEO靠我度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底SEO靠我层数组里的数组。而轴的数量——秩,就是数组的维数。
很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
NSEO靠我umPy 的数组中比较重要 ndarray 对象属性有:
umpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
numpSEO靠我y.empty(shape, dtype = float, order = C)创建指定大小的数组,数组元素以 0 来填充:
mport numpy as np# 默认为浮点数 x = np.zeros(5SEO靠我) print(x)# 设置类型为整数 y = np.zeros((5,), dtype = int) print(y)# 自定义类型 SEO靠我z = np.zeros((2,2), dtype = [(x, i4), (y, i4)]) print(z)创建指定形状的数组,数组元素以 1 来填充:
impoSEO靠我rt numpy as np# 默认为浮点数 x = np.ones(5) print(x)# 自定义类型 x = np.ones([2,2], dtySEO靠我pe = int) print(x)numpy.asarray 类似 numpy.array,但 numpy.asarray SEO靠我参数只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)numpy.frombuffeSEO靠我r 用于实现动态数组。
numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
numpy.frombuffer(buffer, dtype = flSEO靠我oat, count = -1, offset = 0)注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加SEO靠我上 b。
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, SEO靠我stop, step, dtype)numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stoSEO靠我p, num=50, endpoint=True, retstep=False, dtype=None)ndarray对象的内容可以通过索引或切片来访问和修改,与 Python SEO靠我中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割SEO靠我出一个新数组。
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行SEO靠我数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维SEO靠我数相同,且各维度的长度相同。
简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
数组拥有相同形状。当前维度的值相等。当前维度的值有一个是 SEO靠我1。若条件不满足,抛出 "ValueError: frames are not aligned" 异常。
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个SEO靠我数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。
注:也可以使用 "&"、 "~"、 "|" 和 "^" 等操作符进行计算。
NumPy 包含大量的各种数SEO靠我学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。
numpy.around() 函数返回指定数字的四舍五入值。
import numpy as npa = np.array([SEO靠我1.0,5.55, 123, 0.567, 25.532]) print (原数组:) print (a) print (\n) priSEO靠我nt (舍入后:) print (np.around(a)) print (np.around(a, decimals = 1)) print (np.SEO靠我around(a, decimals = -1))numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。
import numpy as npa = nSEO靠我p.array([-1.7, 1.5, -0.2, 0.6, 10]) print (提供的数组:) print (a) print (\n) SEO靠我 print (修改后的数组:) print (np.floor(a))numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。
impSEO靠我ort numpy as npa = np.array([-1.7, 1.5, -0.2, 0.6, 10]) print (提供的数组:) print (a) SEO靠我 print (\n) print (修改后的数组:) print (np.ceil(a))NumPy 算术函数包含简单的加减乘除: add(SEO靠我),subtract(),multiply() 和 divide()。
需要注意的是数组必须具有相同的形状或符合数组广播规则。
numpy.reciprocal() 函数返SEO靠我回参数逐元素的倒数。如1/4 倒数为 4/1。
numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
numSEO靠我py.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。
numpy.sort() 函SEO靠我数返回输入数组的排序副本。函数格式如下:
numpy.sort(a, axis, kind, order)参数说明:
a: 要排序的数组axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排SEO靠我序, axis=0 按列排序,axis=1 按行排序kind: 默认为quicksort(快速排序)order: 如果数组包含字段,则是要排序的字段numpy.argsoSEO靠我rt() 函数返回的是数组值从小到大的索引值。
numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后SEO靠我的列。
这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩SEO靠我在倒数第二列,英语成绩在倒数第三列。
numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引SEO靠我。
numpy.nonzero() 函数返回输入数组中非零元素的索引。
numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。
### ~tips:该篇只是简单的介绍Numpy库的安装及一些内置方法的使用,非常的基础。SEO靠我看不懂的地方多看几遍应该就很容易理解。另外有需要进阶的学习的people可以去Numpy教程官网(上文其实也是大同小异与其手册内容~~~只是其中叫基础的部分的提炼)学习学习。www.runoob.coSEO靠我m Numpy###
网站备案号:浙ICP备17034767号-2