numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
用法:np.vectorize(函数)(待函数处理的数据)
Parameters:
pyfunc:python函数或方法
otypes:输出数据类型。必须将其指定为一个typecode字符串或一个数据类型说明符列表。每个输出应该有一个数据类型说明符。
doc:函数的docstring。如果为None,则docstring将是 pyfunc.__doc__。
excluded:表示函数不会向量化的位置或关键字参数的字符串或整数集。这些将直接传递给未经修改的pyfunc
cache:如果为True,则缓存第一个函数调用,该函数调用确定未提供otype的输出数。
signature:广义通用函数签名,例如,(m,n),(n)->(m)用于矢量化矩阵 - 向量乘法。如果提供的话,pyfunc将调用(并期望返回)具有由相应核心维度的大小给出的形状的数组。默认情况下,假定将标量作为输入和输出。Returns:
vectorized:向量化的数组
首先回顾一下python字典的get()用法
有key的话返回value,没有key则返回None。
dict = {'Name': 'Runoob', 'Age': 27}
dict.get('Age') # 27
dict.get('Name') # 'Runoob'
dict.get('aaa') # None
dict.get # <function dict.get> 是一个函数哦
vectorize怎么把函数向量化呢?
用法:np.vectorize(函数)(待函数处理的数据)
# 例子1
# 定义函数
def myfunc(a, b):
if a > b:
return a - b
else:
return a + b
vfunc = np.vectorize(myfunc)([1, 2, 3, 4], 2)
print(vfunc)
# array([3, 4, 1, 2])
# 例子2
testdict = {'Name': 'Runoob', 'Age': 27}
b = np.vectorize(testdict.get)('Name')
print(b)
# array('Runoob', dtype='<U6')
# 例子3
# 传入多值也ok的哦
testdict = {'Name': 'Runoob', 'Age': 27}
b = np.vectorize(testdict.get)(['Name','Age'])
print(b)
# array(['Runoob', '27'], dtype='<U6')
再进阶一些
data = [['341341321','413241321','41324321','313513135'],
['78685765871','566454521','565654545','545456545']]
print(type(data)) # <class 'list'>
data = np.array(data).astype("int64")
print(data)
# [[ 341341321 413241321 41324321 313513135]
# [78685765871 566454521 565654545 545456545]]
print(type(data))
# <class 'numpy.ndarray'>
# 从list转为numpy.array就可以shape了
data.shape
# (2, 4)
# 所有行的第一列
data[:, 0]
# array([ 341341321, 78685765871])
data[:, 1:]
# array([[413241321, 41324321, 313513135],
# [566454521, 565654545, 545456545]])
# 定义一个字典
ooomydict = {341341321:'aaaaa', 78685765871:'bbbbb'}
a = np.vectorize(mydict.get)(data[:, 0])
# 这里data[:, 0] = array([ 341341321, 78685765871])
print(a)
# array(['aaaaa', 'bbbbb'], dtype='<U5')
# 结论
# 传进去的key list,通过np.vectorize向量化函数,得到字典中key对应value list
代码截图
部分内容参考
【python】详解numpy.vectorize的使用,将函数向量化_brucewong0516的博客-CSDN博客_np.vectorize