认识Python模块——Numpy(2)

利用Python进行数据分析学习笔记   

纸上得来终觉浅,绝知此事要躬行!

通用函数

利用数组进行简单数据处理

1.以矢量化运算代替循环语句

2.将条件逻辑表述为数组运算

3.数学和统计方法

4.用于布尔型数组的方法

5.排序

6.唯一化以及其它集合逻辑



通用函数

 

Numpy通用函数,ufunc,是对ndarray数据执行元素级运算的函数,一般都是简单元素级变体,如sqrt和exp、add和maximum。

import numpy as np
a1=np.arange(2,9,1.5)
a2=[np.sqrt(a1),np.exp(a1)]
# a2=[array([ 1.41421356,  1.87082869,  2.23606798,  2.54950976,  2.82842712]), \
# array([   7.3890561 ,    33.11545196,   148.4131591 ,   665.14163304,2980.95798704])]

add:将数值中的对应元素相加; vstack:数组垂直组合;hstack:数组水平组合

np.add(np.sqrt(a1),np.exp(a1))
# array([    8.80326966,    34.98628065,   150.64922708,   667.6911428 ,2983.78641417])

np.vstack((np.sqrt(a1),np.exp(a1)))
# array([[  1.41421356e+00,   1.87082869e+00,   2.23606798e+00,
#          2.54950976e+00,   2.82842712e+00],
#       [  7.38905610e+00,   3.31154520e+01,   1.48413159e+02,
#          6.65141633e+02,   2.98095799e+03]])

np.hstack((np.sqrt(a1),np.exp(a1)))
# array([  1.41421356e+00,   1.87082869e+00,   2.23606798e+00,
#         2.54950976e+00,   2.82842712e+00,   7.38905610e+00,
#         3.31154520e+01,   1.48413159e+02,   6.65141633e+02,2.98095799e+03])

利用数组进行简单数据处理

1.以矢量化运算代替循环语句

meshgrid()接受2个一维数组,产生2个二维矩阵(对应于2个数组中所有的(x,y)对)

np.meshgrid(range(-2,3,1),range(2,-3,-1))
'''
[array([[-2, -1,  0,  1,  2],
        [-2, -1,  0,  1,  2],
        [-2, -1,  0,  1,  2],
        [-2, -1,  0,  1,  2],
        [-2, -1,  0,  1,  2]]), 
array([[ 2,  2,  2,  2,  2],
        [ 1,  1,  1,  1,  1],
        [ 0,  0,  0,  0,  0],
        [-1, -1, -1, -1, -1],
        [-2, -2, -2, -2, -2]])]
'''

2.将条件逻辑表述为数组运算

where()是三元表达式x if condition else y 的矢量化版本。

import numpy as np
a1=np.random.randn(4,4)
a2=np.where(a1>0,1,-1)
[a1,a2]
'''
[array([[-0.8706278 ,  0.0237752 , -0.99088391,  2.83025983],
        [ 0.14434257,  0.46890902, -0.04495302,  0.34565242],
        [-1.23190889,  2.46150353, -1.04977117,  1.11144464],
        [-0.34056044,  1.92221497, -0.20429243, -1.58721302]]),
 array([[-1,  1, -1,  1],
        [ 1,  1, -1,  1],
        [-1,  1, -1,  1],
        [-1,  1, -1, -1]])]
'''

3.数学和统计方法

可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计分析。sum、mean、std等聚合计算既可以当作数组的实例方法调用,也可以当作顶级Numpy函数使用:

a3=np.random.randn(5,4)
a3.mean()
[a3.sum(),a3.sum(0),a3.sum(1)]
'''
-0.016256698097642252
[-0.32513396195284505,
 array([ 1.26495619,  0.66067243, -1.5200986 , -0.73066398]),
 array([-1.20911137,  1.05979398,  0.89817777,  0.20638696, -1.2803813 ])]
'''
基本数组统计方法
方法说明
sum对数组中全部或某轴向的元素求和
mean算术平均数
std、var标准差、方差
min、max最小最大值
argmin、argmax最小、最大元素索引
cumsum所有元素累计和
cumprod所有元素累计积

4.用于布尔型数组的方法

布尔值在统计方法中会强制转换为0(flase)、1(true)。利用sum可以对布尔型数组计数:

(np.random.randn(50)>0).sum()

方法any用于测试数组中是否存在true,all检查数组中是否全是true。

5.排序

sort方法就地排序:

a1=np.random.randn(3,4)
print(a1)
a1.sort(1)
print(a1)
a1.sort(0)
print(a1)
'''
[[ 0.71182775  0.07219067  0.03180469 -0.92782231]
 [-0.81696553  0.53741266  0.69825186  1.0744595 ]
 [ 1.43357465  0.94246017 -1.36653131  0.88005336]]
[[-0.92782231  0.03180469  0.07219067  0.71182775]
 [-0.81696553  0.53741266  0.69825186  1.0744595 ]
 [-1.36653131  0.88005336  0.94246017  1.43357465]]
[[-1.36653131  0.03180469  0.07219067  0.71182775]
 [-0.92782231  0.53741266  0.69825186  1.0744595 ]
 [-0.81696553  0.88005336  0.94246017  1.43357465]]
'''

6.唯一化以及其它集合逻辑

Numpy提供了针对一维数组ndarray的基本集合运算。np.unique()用于找出数组中的唯一值并返回已排序的结果,效果类似于sorted(set(names))

names=np.array(["zhao","qian","li","zhao","sun"])
np.unique(names)
'''
array(['li', 'qian', 'sun', 'zhao'],
      dtype='<U4')
'''

np.in1d()用于测试一个数组的值在另一个数组中的成员资格,返回一个布尔值数组。

数组的集合运算
方法说明
unique(x)计算x中的唯一元素,并返回有序结果
intersect1d(x,y)计算x、y中的公共元素,并返回有序结果
union1d(x,y)计算x、y的并集,并返回有序结果
in1d(x,y)得到一个“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y)集合的差:元素在x中且不在y中
setxor1d(x,y)集合的对称差:存在于单个数组中但不同时存在于两个数组中的元素

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值