Numpy:自定义ufunc函数

import numpy as np

一、介绍

使用frompyfunc或者vectorize可以将计算单个元素的函数转换成对数组中每个元素的ufunc函数

二、frompyfunc

定义一个计算单个元素的函数

# triangle_wave()是一个将x值转换成三角波上对应的y值
def triangle_wave(x,c,c0,hc):
    x = x - int(x)
    if x >= c: r =0.0
    elif x< c0: r = x/c0*hc
    else: r = (c-x)/(c-c0)*hc
    return r

通过列表推导依次调用triangle_wave计算单个x值对应的y值

x = np.linspace(0,2,1000)
y1 = np.array([triangle_wave(t,0.6,0.4,1.0) for t in x])

使用frompyfunc(func,nin,nout)将单值计算函数转换成数组计算函数,其中func是单值计算函数,nin是func的输入参数的个数,nout是func的返回值的个数

triangle_ufunc1 = np.frompyfunc(triangle_wave,4,1)
y2 = triangle_ufunc1(x,0.6,0.4,1.0)

由np.frompyfunc()转换的函数返回值是object,故需要显式将其类型转换为np.float

print(y2.dtype)
print(y2.astype(np.float).dtype)
object
float64

三、vectorize

vectorize()类似于frompyfunc(),只不过可以通过otypes指定返回的数组的元素类型

triangle_ufunc2 = np.vectorize(triangle_wave,otypes=[np.float])
y3 = triangle_ufunc2(x,0.6,0.4,1.0)
print(y3.dtype)
float64
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BQW_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值