赣州新闻网

首页 / 科技

Python进阶之NumPy快速入门(四)

2020-02-20 · 赣州新闻网 · 科技

引言

NumPy是Python的一个扩展库,负责数组和矩阵运行。相较于传统Python,NumPy运行效率高,速度快,是利用Python处理数据必不可少的工具& = D l t u O X S / + 7是行排序。


我们通过一个例子来查看d @ D ] , _sort的功能:

import numpy as np

a = np.3 , i Z v k h 5 ^array([T , z i z |,])  

print7 * S b 3 (np.sort(a))

print (np.sort(a, axis =  0))

print (np.sort(a, a J mxis =  1))

讲解:我们建立了一个形状为(2,2)的数组,分别调用三次sort函数,第一次只有一个参数a,也就是被排序的数组,第二三分别设定axis=0和1。


运行结- ` R a果:

[

]

[

]

[

]


numpy.argsort() 函数返回的是数组值从小到大的索引值3 0 C C u Y a。arg是argument的缩写c r ; o 6 M { m,表示参数,也就是排序的数组值对应的索引序R - c h Z ^ :号。

b = np.array()

print (np.argsort(b))

print (b)

讲解:对于数组b我们先给出排序后的索引顺序。按照从小到大的顺序,结果应该是。因为最小的数字是b,中间大的数字是b,最大的数字是b[0 j 2 G i J 。如果你把排序索引作为b的新索引,就可以实现对b的排序。


运行结果:


第十一节.条件筛选


我们可以通过NumPy中条件筛选函数,来按照% C N条件函数筛选出来我们想要的结果。


numpy.argmax() & numpy.argmin()

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。我们以argmax函数为例子进行讲解。其格式如下:

numpyn 4 $ { u U B C P.argmax(a, axis)i I L d j x ) U N

参数说明:

  • 当只有a的时候,输出结果是数组所有元素中的最大值对应的总索引
  • 当axis=0的时候,输出为每一列最大C 2 b l F h ] h元素的索引
  • 当axis=1的时候,输出为每一行最大元素的索引

我们用代码进行说明:

import numpy as n8 ~ op

a = np.array([,Q { ~ N W E,])  

print (np.argmax(a))

print (np.argmax(a, axis =  0))

print (np.argmax(a, axiH e t S J E G =s =  1))

讲解:

我们尝试了argmax的三种情况,分别对应{ P M ; C 0 Z [上面的说明。其中数组a中最大元素是90,总索引为7。当axis=0的时候,从左到右每一列最r r b V i 4 $ G大数字对应的索引值分别为。当axis=1的时候,从上到下每一行最大数字对应的索引值分别为。


运行结果:

7


numpy.n+ R f x 0 conzero()

numpy.nonzero() 函数返回输入数组中非零元素的索引:

b = np.array([,,])  

p; J % n ,rint (np.nonzero(b))

prib W j /nt (b)

讲解:对于数组b,我们先打印它的非零元素对应的索引。一个有六个元素是非零的,运行结果的形式是先给定行索引,然后是列索引。然后我们再把索引作为数组b的索引就可以挑选出数组b中所有非零元素,返回形式为一维数组。


运行结果:

(array(, dtype=int64), array(, dtype=int64))


numpy.where()

nu1 F ympy.where() 函数~ } 6 Q返回输入数组中满足给定条件_ K O的元素的索引。这个函数的使用频率高,但是经常容易出9 z [ s错。

c = np.arange(9).reshape(3,  3)   

print (np.where(c > 3))

print (i 3 T M J Vc)

讲解:我们建立了一个形状为(3i b z,3)的数组,里面的元素是从1到9。我们用np.where试图筛选所有大于3的元S 6 | n $素。第一步是筛选出所有大于3元素对应的索q W C h S y x引,然后把索引作为数组c的索u [ 9引,就可以筛选出所有大于3的元素出来。


运行结果:

(array(, dtyt N F vpe} Y z=int64),f v 0 t [ array(Q { d, dtype=int64))


第十二节.线性代数

NumPy 提供了线性代数函数库,该库包含了线性代数所M D ) R S H @ s i需的所有功能,可以看看下面的说明:

  • dot 两个数组的点积,即元素对应相乘。
  • vdot 两个向量的点积
  • inner 两个数组的内积
  • matmul 两个数组的矩阵积
  • determinantY u S q 数组的行列式
  • solve 求解线0 Q 6 [ # q 5性矩阵方程
  • inv 计算矩阵的乘法逆矩阵


我们把这些函数大致分为两类,介绍其中比较重要的函f F a l b l数。

第一类求矩阵的积

import numpy as np

aJ * 4 S K W p = = np.array([= T [ u = Y 7 I F,])

b = np.array([,s u (])

print(np.dot(a, S 6 $ 0 j l ) #b))

print (np^ & y D 9 L [ o.vdot(a,b))

print (np.matmul(a,b))


讲解:我们尝试三种矩阵求积的函数,其中第一个函数dot负责矩阵相乘;第二个函数vdot求点积,运算公式是1*11+2*12+3*13+4*14=130;第三个函数mutmul和第一个函数dot功能是一样的。


运行结果:

[

]

13Y ( ] R j0

[

]


第二类求行列式相关

b = np.array([, ]) 

print (np.linalg.det(b))

print (np.linalg.inv(b))


讲解:我们使用了两个函数。第s F X G _ x m : *一个函数求矩阵的行列式,第二个函数求矩阵的逆F = d k矩阵。


运行结果:

-2.0000000000000004

[

]

利用龙南相较于运行必不可少效率高引言速度快进阶