人工智能之Numpy与Pandas培训文档
创建时间:2018-09-09  访问量:2914  4  0

人工智能之Numpy与Pandas培训文档

快速的元素级数组函数

通用函数:一种对ndarray中的数据执行元素级运算的函数,也可以看做是简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。

reshape():修改数组的形状,前面已经很熟悉了。

>>> import numpy as np
>>> arr = np.arange(10).reshape(2,-1)
>>> arr
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

sqrt():开方计算。

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

 

下面讲一些常有的函数,如果想要学习更多的函数,参考:https://www.numpy.org/devdocs/reference/ufuncs.html Available Ufunc

 

数学操作相关的函数

add: 求两个数据的和,元素级运算:

>>> np.add(1.0, 4.0) # 标量相加
5.0
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x1
array([[0., 1., 2.],
       [3., 4., 5.],
       [6., 7., 8.]])
>>> x2 = np.arange(3.0)
>>> x2
array([0., 1., 2.])
>>> np.add(x1, x2)
array([[  0.,   2.,   4.],
       [  3.,   5.,   7.],
       [  6.,   8.,  10.]])

上面示例是x1是二维数据,x2是一维,当x1与x2相加时,会将x2广播成二维数组。

其它的数学函数还有,subtract(减法)、multiply(乘法)、divide(除法)、power(乘方)、fabs(绝对值)、sqrt(开方)等。自己可以尝试先help查看一下调用参数,再自己试验。

 

三角函数

sin:求元素的正弦值,元素级运算

>>> np.sin(np.pi/2.) # 求单个值的正弦值
1.0
>>> np.sin(np.array((0., 30., 45., 60., 90.)) * np.pi / 180. ) # 求数值元素的正弦值
array([ 0.        ,  0.5       ,  0.70710678,  0.8660254 ,  1.        ])

其它的三角函数有cos(余弦)、tan(正切)、arcsin(反正弦)、arctan(反正切)等。

 

位运算函数

bitwise_and: 元素级的按位与运算,如:

>>> np.bitwise_and(13, 17) # 13=0b00001101 17=0b00010001 13按位与17结果是1=0b00000001
1
>>>
>>> np.bitwise_and(14, 13)
12
>>> np.binary_repr(12) # 显示二进制字符串
'1100'
>>> np.bitwise_and([14,3], 13) # 14按位与13是12,3按位与13是1
array([12,  1])
>>>
>>> np.bitwise_and([11,7], [4,25]) # 11按位与4是0,7按位与25是1 
array([0, 1])
>>> np.bitwise_and(np.array([2,5,255]), np.array([3,14,16]))
array([ 2,  4, 16])
>>> np.bitwise_and([True, True], [False, True])
array([False,  True])

其它的拉运算函数还有:bitwise_or(按位或)、bitwise_xor(按位异或)、invert(按位取反)、left_shift(左移)、right_shift(右移)。

 

比较函数

greater(x1, x2, /[, out, where, casting, …]):如果x1>x2返回真值:

>>> np.greater([4,2],[2,2])
array([ True, False])

如果x1与x2是ndarray对象,那么np.greater就相当于'>'(大于号):

>>> a = np.array([4,2])
>>> b = np.array([2,2])
>>> a > b
array([ True, False])

其它的比较函数还有:greater_equal(大于等于)、less(小于)、less_equal(小于等于)、not_equal(不等于)、equal(等于)。

 

逻辑运算函数

logical_and(x1, x2, /[, out, where, …]):x1与x2的逻辑与操作:

>>> np.logical_and(True, False)
False
>>> np.logical_and([True, False], [False, False])
array([False, False])
>>>
>>> x = np.arange(5)
>>> x
array([0, 1, 2, 3, 4])
>>> x > 1
array([False, False,  True,  True,  True])
>>> x < 4
array([ True,  True,  True,  True, False])
>>> np.logical_and(x>1, x<4)
array([False, False,  True,  True, False])

上述代码结果看得很明白。这些都只是函数的使用啊,没什么好讲的,这里只告诉你,有这些类函数而已,大家随便看看,纯属性娱乐!

与其相似的函数还有:logical_or,logical_xor,logixal_not,逻辑或、异或、非操作。

maximum: 返回最大值元素:

>>> np.maximum([2, 3, 4], [1, 5, 2]) # 2比1大,5比3大,4比2大
array([2, 5, 4])
>>>
>>> np.maximum(np.eye(2), [0.5, 2]) # 广播
array([[ 1. ,  2. ],
       [ 0.5,  2. ]])
>>>
>>> np.maximum([np.nan, 0, np.nan], [0, np.nan, np.nan]) # 任务与nan的操作都是nan
array([ NaN,  NaN,  NaN])
>>> np.maximum(np.Inf, 1) # 任何与inf的操作都为inf
inf

np.eye(2)是生成单位矩阵:

>>> np.eye(2)
array([[1., 0.],
       [0., 1.]])

其它类似函数还有:minmum(取最小值)等。

 

浮动函数

isnan: 判断数据中是否有nan元素:

>>> np.isnan(np.nan)
True
>>> np.isnan(np.inf) # inf是无穷大,并不是空
False
>>> np.isnan([np.log(-1.),1.,np.log(0)]) # np.log(-1)无意义所以是nan
array([ True, False, False])

其它类似函数还有:isinf、isinfinit、isnat(非时间nat->not a time )。具体参数官文档。

 

np.where函数

numpy.where(condition[, xy]),用python列表解析来说明上述的np.where方法:

[xv if c else yv for c, xv, yv in zip(condition, x, y)]

condition是bool列表,如[True,False,False],x=[1,2,3],y=[4,5,6]

通过zip(condition,x,y) = [(True,1,4),(False,2,5),(False,3,6)],得到这样一个列表。

然后遍历这个列表,选出condition为True时取x的值,condition为False取y的值,第一个元组,condition为True所以取1,第二元组condition为False所以选y的值5,第三个元组选6。

下面看一下np.where:

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a) # a中对应元素值小地5时,对应这个位置处选a中对应的元素,否则选10*a数组对应的元素
array([ 0,  1,  2,  3,  4, 50, 60, 70, 80, 90])

 

np.unique函数

这个函数很多理解,就是去重。

>>> np.unique(np.array(['Hello','World','Hello','Hi','Python','Python'],dtype=str))
array(['Hello', 'Hi', 'Python', 'World'], dtype='|S6')

看上面的结果,两个Hello,两个Python都只有一个了。