Jon*_*ler 51 python numpy absolute-value
Numpy提供了两者np.absolute和np.abs通过定义的别名
from .numeric import absolute as abs
Run Code Online (Sandbox Code Playgroud)
这似乎明显违反了蟒蛇的禅宗:
应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
所以我猜这有充分的理由.
我个人一直在使用np.abs几乎所有的代码,并查看例如np.abs与np.absolute在Stack Overflow上的搜索结果数量,似乎绝大多数都是这样(2130 vs 244次点击).
没有任何理由,我应该优先使用np.absolute过np.abs在我的代码,或者我应该简单地去为更多的"标准" np.abs?
MSe*_*ert 46
这很可能是因为有一个同名的内置函数abs.对于和np.amax,也是如此.np.aminnp.round_
为NumPy的函数的别名abs,min,max和round仅在顶层包定义.
所以np.abs并且np.absolute完全相同.你使用哪一个并不重要.
短名称有几个优点:它们更短,并且Python程序员知道它们,因为名称与内置Python函数相同.因此,最终用户可以更轻松(更少打字,更少记住).
但也有原因,有不同的名称太:NumPy的(或更一般的第三方包)有时需要Python的功能abs,min等等.所以,他们定义了不同的名称的功能,所以你仍然可以访问Python函数封装内-和公正在包的顶层,您将公开"快捷方式".注意:在这种情况下,不同的名称不是唯一可用的选项:builtins如果有一个阴影内置名称,可以通过Python模块解决这个问题以访问内置函数.
也可能是这种情况(但这是我的纯粹推测),他们最初只包括长命名的函数absolute(等等),后来只添加了短别名.作为一个庞大且使用良好的库,NumPy开发人员不会轻易删除或弃用这些东西.因此,他们可能只保留长名称,因为它可能会破坏旧代码/脚本,如果他们将删除它们.
Nic*_*mer 16
还有Python 的内置函数abs(),但实际上所有这些函数都在做同样的事情。他们的速度甚至完全相同!(其他函数则不然,例如max()。)
重现情节的代码:
import numpy as np
import perfplot
def np_absolute(x):
return np.absolute(x)
def np_abs(x):
return np.abs(x)
def builtin_abs(x):
return abs(x)
b = perfplot.bench(
setup=np.random.rand,
kernels=[np_abs, np_absolute, builtin_abs],
n_range=[2 ** k for k in range(25)],
xlabel="len(data)",
)
b.save("out.png")
b.show()
Run Code Online (Sandbox Code Playgroud)