【Numpy】vectorize将函数向量化

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

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值