属于python的扩展库,用于科学计算,提供了数组、函数库(包括线性、傅里叶变换和随机函数等),主要功能如下:数组的算数和逻辑运算
傅立叶变换和用于图形操作的例程
与线性代数有关的操作, NumPy 拥有线性代数和随机数生成的内置函数
数组:
1)一维数组
a=[1,2,3,4]
b=numpy.array(a)
b.size #数组元素个数
b.ndim #数组维度
b.dtype #数组元素类型
b.shape #数据形状
numpy.around(a,decimals) 返回四舍五入到所需精度的值
numpy.floor(arr) 此函数返回不大于输入参数的最大整数
numpy.ceil(arr) 函数返回输入值的上限
数组的加减乘除
a = numpy.array([10,10,10]) b = numpy.array([10,10,10]) c=numpy.add(a,b) print(c) d=numpy.subtract(a,b) print(d) e=numpy.multiply(a,b) print(e) f=numpy.divide(a,b) print(f)
numpy.power(arr1,arr2) 求幂
numpy.mod(arr1,arr2) 求余数
最大值和最小值
numpy.amin()
numpy.amax()
numpy.mean()
numpy.std() 标准差
numpy.var() 方差
a = numpy.array([10,11,10]) b=numpy.amax(a,axis=0) print(a)
numpy.average()
加权平均值是由每个分量乘以反映其重要性的因子得到的平均值。 numpy.average()函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。 该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开。
考虑数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。
加权平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)
2)多维数组
b=numpy.ones([10,10])#创建10行10列的数值为浮点1的矩阵
c=numpy.zeros([10,10]) #创建10行10列的数值为浮点0的矩阵 d=numpy.array(c) #深拷贝 e=numpy.asarray(c) #浅拷贝
a=[1,2] b=[3,4] c=[5,6] d=numpy.array([a,b,c])
a = numpy.empty([3,2], dtype = int)#创建空数组ndarray.flatten(order) 该函数返回折叠为一维的数组副本,函数接受下列参数:order:'C' — 按行,'F' — 按列,'A' — 原顺序,'k' — 元素在内存中的出现顺序
a=numpy.array([1,2,3]) c=a.flatten() print(c)
a.ravel(order) 函数返回展开的一维数组
order:'C' — 按行,'F' — 按列,'A' — 原顺序,'k' — 元素在内存中的出现顺序。
a=numpy.array([1,2,3]) c=a.ravel() print(c)
数组转置:
a=numpy.array([[1,2,3],[4,5,6]]) b=numpy.transpose(a) c=a.T print(b) print() print(c)
连接多个数组:
numpy.concatenate((a1, a2, ...), axis)
其中:
a1, a2, ...:相同类型的数组序列
axis:沿着它连接数组的轴,默认为 0
a=numpy.array([[1,2,3],[4,5,6]]) b=numpy.array([[1,2,3],[4,5,6]]) c=numpy.concatenate((a, b), axis=0) print(c)
numpy.append() 在数组末尾添加
numpy.split() 数组分割
numpy.insert(arr, obj, values, axis) 此函数在给定索引之前,沿给定轴在输入数组中插入值。 如果值的类型转换为要插入,则它与输入数组不同。 插入没有原地的,函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开。
a=numpy.array([[1,2,3],[4,5,6]]) print(a) b=numpy.insert(a,0,[7,8,9],axis=0) print(b)
Numpy.delete(arr, obj, axis)
此函数返回从输入数组中删除指定子数组的新数组。 与insert()函数的情况一样,如果未提供轴参数,则输入数组将展开。 该函数接受以下参数:
a=numpy.array([[1,2,3],[4,5,6]]) c=numpy.delete(a,1,axis=0) print() print(c)
numpy
.unique
(arr
,return_index
,return_inverse
,return_counts
)
此函数返回输入数组中的去重元素数组。 该函数能够返回一个元组,包含去重数组和相关索引的数组。 索引的性质取决于函数调用中返回参数的类型。
a=numpy.array([1,1,2,3]) b=numpy.unique(a) print(b)
numpy.fromiter(iterable, dtype, count = -1) 此函数从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组。
list=[1,2,3] it=iter(list) a=numpy.fromiter(it,dtype=float)
numpy.arange(start, stop, step, dtype) 返回ndarray对象,包含给定范围内的等间隔值
a=numpy.arange(0,4,1,dtype=int)
numpy.linspace(start, stop, num, endpoint, retstep, dtype) 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。 此函数的用法如下; num 表示元素个数
a=numpy.linspace(10,20,6)
numpy.logscale(start, stop, num, endpoint, base, dtype) 返回一个ndarray
对象,其中包含在对数刻度上均匀分布的数字。 base:刻度的开始和结束端点是某个底数的幂,默认为 10
a=numpy.logspace(1,20,10)
创建随机数(组):
a=numpy.random.rand(10, 10) #创建指定形状(示例为10行10列)的数组(范围在0至1之间) b=numpy.random.uniform(0, 100) #创建指定范围内(0~100)的一个数 c=numpy.random.randint(0, 10) #创建指定范围内(0~10)的一个整数
numpy.
3)正态分布
a=numpy.random.normal(1.75, 0.1, (2, 3))#给定均值/标准差/维度(2行3列)的正态分布
b=a.reshape([1,6])#改变数组的形状(2行3列转化为1行6列)
4)运算
a=[1,2] b=[3,4] c=[5,6] d=numpy.array([a,b,c])
条件运算:
a>3
三目运算:
e=numpy.where(d>3,0,d)
最大最小值
f=numpy.amax(d,axis=1) #指定轴最大值;axis=0/1; 0表示列1表示行
g=numpy.amin(d,axis=1) #指定轴最小值;axis=0/1; 0表示列1表示行
h=numpy.mean(d,axis=1) #指定轴平均值;axis=0/1; 0表示列1表示行
i=numpy.std(d,axis=1) #指定轴方差;axis=0/1; 0表示列1表示行
注:方差=∑(x-平均值)2
运算:
数组和数组可以进行加减乘除运算
数组和数可以加减乘除运算
矩阵和数可以加减乘除运算
同列的数组和矩阵可以加减运算
同型矩阵可以加减运算
a=[1,2] b=[3,4] c=[5,6] a1=[1,1] a2=[2,2] d=numpy.array([a,b,c]) d1=numpy.array(a1,a2)
e=numpy.dot(d,d1) #矩阵相乘
注:(M行, N列) * (N行, Z列) = (M行, Z列) ;否则不能运算
v1=[[1,2,3],[4,5,6]] v2=[[1,2,3],[4,5,6]] a=numpy.vstack((v1,v2)) #矩阵的垂直拼接
b=numpy.hstack((v1,v2)) #矩阵的水平拼接
a.flags #返回数组属性
5)切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样。
ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引
基本切片:slice(start,end,step)
a=numpy.arange(10) s=slice(2,5,2) b=a[s]
或
a=numpy.arange(10) b=a[2:5:2]
在上面的例子中,ndarray对象由arange()函数创建。 然后,分别用起始,终止和步长值2,7和2定义切片对象。 当这个切片对象传递给ndarray时,会对它的一部分进行切片,从索引2到5,步长为2。
获取单个元素:
a=numpy.arange(10) b=a[2]
注意:如果只输入一个参数,则将返回与索引对应的单个项目。 如果使用a:,则从该索引向后的所有项目将被提取。 如果使用两个参数(以:分隔),则对两个索引(不包括停止索引)之间的元素以默认步骤进行切片。
切片还可以包括省略号(...),来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的ndarray
a = numpy.array([[1,2,3],[3,4,5],[4,5,6]]) print(a) print('\n') print('第二列的元素是:') print (a[...,1] ) print('\n') print('第二行的元素是:') print(a[1,...]) print('\n') print('第二列及其剩余元素是:') print (a[...,1:])
高级索引:
定义一个行索引数组和一个列索引数组,分别对应原数组的行和列
x = numpy.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) rows = numpy.array([[0,0],[3,3]]) cols = numpy.array([[0,2],[0,2]]) y = x[rows,cols] print(y)
6)广播
7)数组的迭代
a=numpy.array([[1,2,3],[4,5,6]]) b=numpy.nditer(a) for i in b: print(i)
8)字符数组操作,放在numpy.char中定义
9)排序
numpy.sort(a, axis, kind, order)
axis 0:列;1:行,沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序
kind 默认为'quicksort'(快速排序)
order 如果数组包含字段,则是要排序的字段
a = numpy.array([[3,7],[9,1]]) b=numpy.sort(a,axis=0) print(b)
numpy.argsort() 函数对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组
a = numpy.array([[3,7],[9,1]]) b=numpy.argsort(a,axis=1) print(b)
numpy.argmax() 和 numpy.argmin()
这两个函数分别沿给定轴返回最大和最小元素的索引。
numpy.extract()函数返回满足任何条件的元素
10)副本和视图
在执行函数时,其中一些返回输入数组的副本,而另一些返回视图。 当内容物理存储在另一个位置时,称为副本。 另一方面,如果提供了相同内存内容的不同视图,我们将其称为视图
简单的赋值不会创建数组对象的副本。 相反,它使用原始数组的相同id()来访问它。 id()返回 Python 对象的通用标识符,类似于 C 中的指针。
此外,一个数组的任何变化都反映在另一个数组上。 例如,一个数组的形状改变也会改变另一个数组的形状
a = numpy.array([[3,7],[9,1]]) print(id(a)) print() b=a print(id(b))
视图或浅复制:numPy 拥有ndarray.view()方法,它是一个新的数组对象,并可查看原始数组的相同数据。 与前一种情况不同,新数组的维数更改不会更改原始数据的维数,新旧数组的id不同
a = numpy.array([[3,7],[9,1]]) print(id(a)) print() b=a.view() print(id(b))
深复制:ndarray.copy()函数创建一个深层副本。 它是数组及其数据的完整副本,不与原始数组共享
a = numpy.array([[3,7],[9,1]]) print(id(a)) print() b=a.copy() print(id(b))
11) 矩阵库
numpy.matlib:此模块的函数返回矩阵而不是返回ndarray对象
numpy.matlib.empty(shape, dtype, order) 函数返回一个新的矩阵,而不初始化元素(填充为随机数据)
注:shape 为元组
import numpy.matlib a=numpy.matlib.empty((2,3)) print(a)
numpy.matlib.zeros()用0填充;numpy.matlib.ones()用1填充
a=numpy.matlib.zeros((2,3)) print(a)
numpy.matlib.identity()函数返回给定大小的单位矩阵。单位矩阵是主对角线元素都为 1 的方阵
a=numpy.matlib.identity(5) print(a)
numpy.matlib.rand()`函数返回给定大小的填充随机值的矩阵。
a=numpy.matlib.rand((2,3)) print(a)
12)线性代数
numpy.linalg模块,提供线性代数所需的所有功能,主要方法如下:
dot 两个数组的点积
vdot 两个向量的点积
inner 两个数组的内积
matmul 两个数组的矩阵积
determinant 数组的行列式
solve 求解线性矩阵方程
inv 寻找矩阵的乘法逆矩阵
numpy.dot():
函数返回两个数组的点积。 对于二维向量,其等效于矩阵乘法。 对于一维数组,它是向量的内积。 对于 N 维数组,它是a的最后一个轴上的和与b的倒数第二个轴的乘积
a=numpy.array([1,2,3]) b=numpy.array([1,2,3]) c=numpy.dot(a,b) print(c)
12)IO
ndarray对象可以保存到磁盘文件并从磁盘文件加载。 可用的 IO 功能有:
load()和save()函数处理 numPy 二进制文件(带npy扩展名)
loadtxt()和savetxt()函数处理正常的文本文件
import numpy a=numpy.array([1,2,3]) numpy.save('a_file.npy',a) b=numpy.load('a_file.npy') print(b)
a=numpy.array([1,2,3]) numpy.savetxt('a_file.txt',a) b=numpy.loadtxt('a_file.txt') print(b)