1、numpy.vectorize()
class numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
定义了一个矢量函数,输入是嵌套化的对象序列或者是numpy数组,
输出是单个或元组的numpy数组。跟 Python中的map()函数很类似。将函数pyfunc作用在序列化的对象上。
numpy.vectorize()只是为了方便,效率比较低。
官方例子:
import numpy as np
def myfunc(a, b):
'Return a-b if a>b, otherwise return a+b'
if a>b:
return a-b
else:
return a+b
vfunc = np.vectorize(myfunc)
print(vfunc([1, 2, 3, 4], 2))
#[3 4 1 2]
相当于 2 与列表中的1,2,3,4 依次 调用函数。即1,2; 2,2; 3,2; 4,2做vfunc计算。
2、np.digitize()函数
umpy.digitize(x, bins, right = False)
参数:
x : numpy数组
bins :一维单调数组,必须是升序或者降序
right:间隔是否包含最右
返回值:x在bins中的位置。
用法示例:
import numpy as np
bins = np.array(range(-99, 102, 3))
a = np.digitize(-98,bins) #a=1
b = np.digitize(68,bins) #b=56
print(a)
print(b)
bins值为-99到102(取不到102)的值( [-99, -96, -93, ... , 93, 96, 99] )。
取值在[-∞ ,-96)区间内返回值为1,
在[96,-93)区间内返回值为2,
...
在[96,+∞ )区间返回值为66。
所以a的值为1,b的值为56。
3、对numpy中array和asarray的区别详解
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
4、numpy.intersect1d
numpy.intersect1d(ar1, ar2, assume_unique=False)
求两个数组的交集.
返回非重复的有序数组,数组成员同时在ar1, ar2中
参数:
ar1, ar2 : array_like
assume_unique : bool值
assume_unique 如果为真,输入的数组ar1和ar2的元素不重复 ,这样可以加速计算,assume_unique默认为假。
比如:
np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])
array([1, 3])
在多于两个序列时经常要结合reduce()函数一起使用(To intersect more than two arrays, use functools.reduce):
np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])
#array([1, 3])
在多于两个序列时经常要结合reduce()函数一起使用(To intersect more than two arrays, use functools.reduce):
from functools import reduce
reduce(np.intersect1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))
#array([3])
5、reduce()函数
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
如:
def myadd(x,y):
return x+y
sum=reduce(myadd,(1,2,3,4,5,6,7))
print(sum)
#结果就是输出1+2+3+4+5+6+7的结果即28
当然,也可以用lambda的方法,更为简单:
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))
print sum
在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
6、numpy: np.logical_and/or/not (逻辑与/或/非)
np.logical_and (逻辑与)
np.logical_and(x1, x2, *args, **kwargs)
Test
>>> np.logical_and(True, False)
False
>>> np.logical_and([True, False], [False, False])
array([False, False], dtype=bool)
>>> x = np.arange(5)
>>> np.logical_and(x>1, x<4)
array([False, False, True, True, False], dtype=bool)
np.logical_or (逻辑或)
np.logical_or(x1, x2, *args, **kwargs)
Test
>>> np.logical_or(True, False)
True
>>> np.logical_or([True, False], [False, False])
array([ True, False], dtype=bool)
>>> x = np.arange(5)
>>> np.logical_or(x < 1, x > 3)
array([ True, False, False, False, True], dtype=bool)
np.logical_not (逻辑非)
logical_not(x, *args, **kwargs)
Test
>>> np.logical_not(3)
False
>>> np.logical_not([True, False, 0, 1])
array([False, True, True, False], dtype=bool)
>>> x = np.arange(5)
>>> np.logical_not(x<3)
array([False, False, False, True, True], dtype=bool)