热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python如何定义函数k_【后端开发】Python如何定义分段函数

Python如何定义分段函数呢?下面是一个分段函数:一开始写了个简单版本log_norm0,只能逐元素一个一个得进行。不用想,

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 >&#61; 0, x <0], [lambda x: np.log(1 &#43; x), lambda x: - np.log(1 - x)])

最后&#xff0c;观察一个各个函数的运行时间。

tic &#61; time.time()

for i in range(x.size):

y[i] &#61; log_norm0(x[i])

toc &#61; time.time()

print(&#39;log0: &#39;, toc - tic)

tic &#61; time.time()

y &#61; log_norm1(x)

toc &#61; time.time()

print(&#39;log1: &#39;, toc - tic)

tic &#61; time.time()

z &#61; log_norm2(x)

toc &#61; time.time()

print(&#39;log2: &#39;, toc - tic)

观察结果&#xff0c;还是使用指示函数的方法最快&#xff0c;不过跟piecewise差别不大。

log0: 33.59282732009888

log1: 0.4863457679748535

log2: 0.5942573547363281



推荐阅读
author-avatar
小宋提刑官_783
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有