python分段函数 保留两位小数_Python如何定义分段函数

本文介绍了Python中定义分段函数的三种方法:简单版本log_norm0、使用指示函数的log_norm1以及numpy的piecewise函数log_norm2。通过运行时间对比,发现使用指示函数的方法(log_norm1)在效率上优于其他两种,但与numpy的piecewise函数差距不大。
摘要由CSDN通过智能技术生成

Python如何定义分段函数呢?下面是一个分段函数:

一开始写了个简单版本log_norm0,只能逐元素一个一个得进行。不用想,对元素个数多的向量,肯定慢成乌龟。

后来想到使用一个指示函数,来区分分段的两种情况,就得到log_norm1。不过这种情况比较特殊,不是每次都能成功构造的。

相关推荐:《Python视频教程》

最后,查到numpy中有函数piecewise(x, condlist, funclist, *args, **kw),它是专门用来构造分段函数,x是输入,condlist表示分段的条件,funclist就表示对应分段的处理函数。这就得到了log_norm2。# elementwise

def log_norm0(x):

if x >= 0:

return np.log(x + 1)

else:

return - np.log(- x + 1)

# indicator

def log_norm1(x):

# ind = np.where(x > 0, 1, 0)

ind = (x > 0)

return np.log(x * ind + 1) - np.log(- x * (1.0 - ind) + 1)

# numpy.piecewise()

def log_norm2(x):

return np.piecewise(x, [x >= 0, x < 0], [lambda x: np.log(1 + x), lambda x: - np.log(1 - x)])

最后,观察一个各个函数的运行时间。tic = time.time()

for i in range(x.size):

y[i] = log_norm0(x[i])

toc = time.time()

print('log0: ', toc - tic)

tic = time.time()

y = log_norm1(x)

toc = time.time()

print('log1: ', toc - tic)

tic = time.time()

z = log_norm2(x)

toc = time.time()

print('log2: ', toc - tic)

观察结果,还是使用指示函数的方法最快,不过跟piecewise差别不大。log0: 33.59282732009888

log1: 0.4863457679748535

log2: 0.5942573547363281

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值