numpy基本方法总结(持续更新中)

转载:https://www.cnblogs.com/xinchrome/p/5043480.html

一、数组方法

创建数组:arange()创建一维数组;array()创建一维或者多维数组,其参数是类似于数组的对象,如列表等。

反过来转换(数组转化为列表)则可以使用numpy.ndarray.tolist()函数,如a.tolist()

创建数组:np.zeros((2,3))  (数组中元素全为0)    或者np.ones(())  (数组中元素全为1)参数是一个元组分别表示行数和列数

对应元素相乘,a*b,得到一个新的矩阵,形状要一致;但是允许a是向量而b是矩阵,a的列数必须等于b的列数,a的每个行向量与对应元素相乘得到行向量。(a,b若为矩阵,左矩阵的列数和右矩阵的行数必须相等才能相乘)

数学上定义的矩阵乘法np.dot(a,b)。如果形状不匹配会报错;但是允许a和b都是向量,返回两个向量的内积。只要有一个参数不是不是向量,就应用矩阵的乘法。(PS:总之向量元素很特殊,在运算中自由转置而不会出错,运算返回值如果纬度为1,也一律用行向量[]表示。

读取数组元素:a[0],a[0,0]

数组变形:如b=a.reshape(2,3,4)将原数组变为2*3*4的三维数组;或是a.reshape(2,3,4)或a.reszie(2,3,4)直接改变数组a的形状

数组组合:水平组合hstack((a,b)或concatenate((a,b),axis=1);垂直组合vstack((a,b))或者concatenate((a,b),axis=0);深度组合dstcak((a,b)) #将一系统数组沿着纵轴方向进度层叠组合

#深度组合
In [6]: a=np.arange(9).reshape(3,3)

In [7]: a
Out[7]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [8]: b=2*a

In [9]: b
Out[9]:
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

In [10]: c=np.dstack((a,b))

In [11]: c
Out[11]:
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],

       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],

       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])

数组分割:与数组组合相反,分别有hsplit,vsplit,dsplit,split(split与concatenate相对应)

将np数组变为py列表:a.tolist()

数组排序(小到大):列排序np.msort(a),行排序np.sort(),np.argsort(a)排序后返回下标

复数排序:np.sort_complex(a)按先实部后虚部排序

数组的插入:np.searchsorted(a,b)将b插入原有序数组a,并返回插入元素的索引值

类型转换:a.astype(int),np的数据类型比py丰富,且每种类型都有转换方法

条件查找:np.where(条件)返回满足数组元素的索引值

条件查找:np.argwhere(条件)返回下标

条件查找:np.([条件],a)返回满足条件的数组元素

根据b中的元素作为索引,查找a中对应的元素:np.take(a,b)一维

数组中最大最小元素的索引:np.argmax(a);np.argmin(a)

多个数组的对应位置上元素大小的比较:np.maximum(a,b,c....)返回每个索引位置上的最大值,np.minimum(a,b,c...)相反

将a中元素都置为b:a.fill(b)

每个数组元素的指数:np.exp(a)

生成等差行向量:如np.linspace(1,6,10)则得到1到6之间的均匀分布,总共返回10个数

求余:np.mod(a,n)相当于a%n,np.fmod(a,n)仍为求余且余数的正负由a决定

计算平均值:np.mean(a)

计算最大值:np.max(a,axis=None, out=None, keepdims=False)返回数组的最大值#axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值

计算加权平均值:np.average(a,b),其中b是权重

计算数组的极差:np.pth(a)=max(a)-min(a)

计算方差(总体方差):np.var(a)

计算标准差:np.std(a)

算数平方根,a为浮点数类型:np.sqrt(a)

对数:np.log(a)

修剪数组,将数组中小于x的数均换位x,小于y的数均换为y:a.clip(x,y)

所有数组元素乘积:a.prod()

数组元素的累积乘积:a.cumprod()

数组元素的符号:np.sign(a),返回数组中各元素的正负符号,用1和-1表示

数组元素分类:np.piecewise(a,[条件],[返回值]),分段给定取值,根据判断条件给元素分类,并返回设定的返回值

判断两数组是否相等:np.array_equal(a,b)

判断数组元素是否为实数:np.isreal(a)

去除数组中收尾为零的元素:np.trim_zeros(a)

对浮点数取整,但不改变浮点数类型:np.rint(a)


二、数组属性

1.获取数组每一维度的大小:a.shape

2.获取数组维度:a.ndim

3.元素个数:a.size

4.数组元素在内存的字节数:a.itemsize

5.数组字节数:a.nbytes==a.size*a.itemsize

6.数组元素覆盖:a.flat=1,则a中数组元素都被1覆盖

7.数组转置:a.T

数组不能求逆,求协方差、迹等,不适用于复杂科学计算,可以将array转换成matrix


三、矩阵方法

创建矩阵:np.mat('....')通过字符串格式创建,np.mat(a)通过array数组创建,也可用matrix或bmat函数创建

matrix不会自动转换行列向量,matrix的所有默认运算都是数学上的矩阵运算,除非用mutiply函数实现点乘

创建复合矩阵:np.bmat('A B','AB')用A和B创建复合矩阵AB(字符串格式)

创建n*n维单位矩阵:np.eye(n)

矩阵的转置:A.T

矩阵的逆矩阵:A.I

计算协方差矩阵:np.cov(x) ,np.cov(x,y)

计算矩阵的迹(对角线元素之和):a.trace()

相关系数:np.corrcoef(x,y)

给出对角线元素:a.diagonal()


四、线性代数

估计线性模型中的系数a=np.linalg.lstsq(x,b),有b=a*x

求方阵的逆矩阵:np.linalg.inv(A)

求广义逆矩阵:np.linalg.pinv(A)

求矩阵的行列式: np.linalg.det(A)

解形如AX=b的线性方程组:np.linalg.solve(A,b)

求矩阵的特征值:np.linalg.eigvals(A)

求特征值和特征向量:np.linalg.eig(A)


五、概率分布

产生二项分布的随机数:np.random.binomial(n,p,size=...),其中n、p、size分别是每轮实验次数、概率、轮数

产生超几何分布随机数:np.random.hypergeometric(n1,n2,n,size=...),其中参数意义分别是物件1总量、物件2总量、每次采样数,实验次数

产生N个正态分布的随机数:np.random.normal(均值,标准差,N)

产生N个对数正态分布的随机数:np.random.lognormal(mean,sigma,N)


六、多项式

多项拟合式:poly=np.polyfit(x,a,n),拟合点集a得到n级多项式,其中x为横轴长度,返回多项式的系数

多项式求导函数np.polyder(poly),返回导函数的系数

得到多项式的n阶导函数:多项式.deriv(m=n)

多项式求根:np.roots(poly)

多项式在某点的值:np.polyval(poly,x[n]),返回poly多项式在横轴点上x[n]上的值

两个多项式做差运算:np.polysub(a,b)


Matpoltlib简单绘图方法

引入简单的绘图的包import matplotlib.pyplot as plt 最后用plt.show()显示图像

基本画图方法:plt.plot(x,y),plt.xlabel('x'),plt.ylabel('y'),plt.title('...')

子图 plt.subplot(abc),其中abc分别表示子图行数、列数、序号

创建绘图组件的顶层容器:fig=plt.figure()

添加子图:ax=fig.add_subplot(abc)

设置横轴上的主定位器:ax.xaxis.set_major_locator(...)

绘制方图:plt.hist(a,b),a为长方形的左横坐标值,b为柱高

绘制散点图:plt.scatter(x,y,c='..',s=..),c表示颜色,s表示大小

添加网格线:plt.grid(True)

添加注释:如ax.annotate('x',xy=xpoint,textcoords='offsetpoints',xytext=(-50,30),arrowprops=dict(arrowstyle='->'))

增加图例:如plt.legend(loc='best',fancybox=True)

对坐标取对数:横坐标plt.semilogx(),纵坐标plt.semilogy(),纵横同时plt.loglog()



猜你喜欢

转载自blog.csdn.net/nageaixiaodenanhai/article/details/79878317