python数据分析(四) python numpy--函数和数组运算

1.数组当中的函数

通用函数是一种对ndarray中的数据执行元素级运算的函数。数组当中的函数与python当中内置的函数没有什么太大的区别,区别就是数组当中的函数可以对数组当中的每一个值进行函数运算不需要编写循环(矢量化)。

一元函数

接受一个数组进行运算的函数叫做一元函数,如sqrt,exp

In [4]: arr=np.arange(10)

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

In [6]: np.sqrt(arr)
Out[6]:
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])

In [7]: np.exp(arr)
Out[7]:
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

二元函数

另外一些函数接受两个数组并返回一个结果数组。如add,maxium。同时还带有一个out参数,能够将运算结果直接赋予其中一个数组,不必在内存当中在进行一次copy操作

In [21]: np.maximum(a,b)
Out[21]:
array([ 1.0166274 ,  0.43801254,  1.43846716,  1.01247244,  0.80244409,
        0.31912314, -0.42904361])

In [22]: np.maximum(a,b,out=a)
Out[22]:
array([ 1.0166274 ,  0.43801254,  1.43846716,  1.01247244,  0.80244409,
        0.31912314, -0.42904361])

In [23]: a
Out[23]:
array([ 1.0166274 ,  0.43801254,  1.43846716,  1.01247244,  0.80244409,
        0.31912314, -0.42904361])

常见一元和二元函数

 

 

 Numpy.where函数

numpy.where 是三元表达式x if condition else y的矢量化版本,具体用法是np.where(cond,xarr,yarr),条件为真则引用第一个数组,条件为假则引用第二个数组

以下是一个例子,将数组当中大于0的值替换为2,小于0的值替换为-2:

In [26]: f
Out[26]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
       [ 0.12222621,  1.33999903,  0.16996622, -1.36640899],
       [ 1.09578869,  0.60744966, -0.99855471,  1.11188253],
       [-0.0239628 ,  1.96097014, -0.25486583,  0.37161357]])

In [27]: np.where(f>0,2,-2)
Out[27]:
array([[-2, -2, -2, -2],
       [ 2,  2,  2, -2],
       [ 2,  2, -2,  2],
       [-2,  2, -2,  2]])

基本数组统计方法

可以通过数组上的一组数学函数对整个数组或者数组当中的某个轴的数据进行计算。获得该数组的统计信息。例如求和,平均数,标准差std。

这些函数既可以当做数组的实例方法使用,也可以当做顶级Numpy函数使用。关于axis,教给大家一个0列一行,当你想要行的数值则axis=1,否则为0.

In [32]: f
Out[32]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
       [ 0.12222621,  1.33999903,  0.16996622, -1.36640899],
       [ 1.09578869,  0.60744966, -0.99855471,  1.11188253],
       [-0.0239628 ,  1.96097014, -0.25486583,  0.37161357]])

In [28]: f.sum()
Out[28]: 0.9381748961800813

In [29]: np.sum(f)
Out[29]: 0.9381748961800813

In [30]: np.mean(f,axis=1)
Out[30]: array([-0.79948221,  0.06644562,  0.45414154,  0.51343877])

In [31]: np.sum(f,axis=1)
Out[31]: array([-3.19792883,  0.26578247,  1.81656618,  2.05375508])

数组统计方法

 

 

 布尔数组方法 any all

在数组当中的布尔值会被当做1和0,所以当你想要获得数组当中有多少为真可以这样做(arr>0).sum(),any和all 用来检测数组当中的布尔值。

all()函数

 检查行或者列当中的 bool值是否全部都是True 或者False

any()函数

检查当中是否有为True的值
 
这两个返回一个布尔值
In [32]: f
Out[32]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
       [ 0.12222621,  1.33999903,  0.16996622, -1.36640899],
       [ 1.09578869,  0.60744966, -0.99855471,  1.11188253],
       [-0.0239628 ,  1.96097014, -0.25486583,  0.37161357]])

In [33]: (f>0).any()
Out[33]: True

In [34]: (f>0).all()
Out[34]: False

数组的排序

像python当中的list,tuple,dict等一样,数组同样具有排序方法,需要注意的是

sort作为内置方法时,通常是对数组本身进行排序,不会生成一个新的数组

In [36]: f
Out[36]:
array([[-1.54076971, -1.01814123, -0.45507675, -0.18394114],
       [-1.36640899,  0.12222621,  0.16996622,  1.33999903],
       [-0.99855471,  0.60744966,  1.09578869,  1.11188253],
       [-0.25486583, -0.0239628 ,  0.37161357,  1.96097014]])

In [37]: m=f.sort()

In [38]: m

In [39]:

In [39]:

作为numpy的顶级方法使用时,会返还一个新的数组

In [39]: m=np.sort(f)

In [40]: m
Out[40]:
array([[-1.54076971, -1.01814123, -0.45507675, -0.18394114],
       [-1.36640899,  0.12222621,  0.16996622,  1.33999903],
       [-0.99855471,  0.60744966,  1.09578869,  1.11188253],
       [-0.25486583, -0.0239628 ,  0.37161357,  1.96097014]])

猜你喜欢

转载自www.cnblogs.com/xiaosanye/p/12011432.html
今日推荐