我应该使用 np.absolute 还是 np.abs?
Should I use np.absolute or np.abs?
Numpy 提供通过
定义的 np.absolute
and the alias np.abs
from .numeric import absolute as abs
这似乎明显违反了 the zen of python:
There should be one-- and preferably only one --obvious way to do it.
所以我猜这是有充分理由的。
我个人几乎在我的所有代码中都使用了 np.abs
并查看了例如Stack Overflow 上 np.abs vs np.absolute 的搜索结果数量似乎绝大多数人都这样做(2130 对 244 次点击)。
有什么理由我应该在我的代码中优先使用 np.absolute
而不是 np.abs
,还是我应该使用更多 "standard" np.abs
?
可能是因为有一个同名的内置函数,abs
。 np.amax
、np.amin
和np.round_
也是如此。
NumPy 函数的别名 abs
, min
, max
and round
仅在顶级包中定义。
所以np.abs
和np.absolute
是完全一样的。使用哪一个都没有关系。
短名称有几个优点:它们更短并且为 Python 程序员所知,因为名称与内置 Python 函数相同。所以最终用户更容易(更少输入,更少记住)。
但也有不同名称的原因:NumPy(或更一般的第 3 方包)有时需要 Python 函数 abs
、min
等。所以在package 他们定义了不同名称的函数,所以你仍然可以访问 Python 函数——而且只是在包的顶层你公开了 "shortcuts"。注意:在这种情况下,不同的名称并不是唯一可用的选项:如果隐藏了内置名称,可以使用 Python 模块 builtins
来访问内置函数。
也可能是这种情况(但这纯粹是我的猜测)它们最初只包含长名称函数 absolute
(等等),后来才添加短别名。作为一个大型且使用良好的库,NumPy 开发人员不会轻易删除或弃用一些东西。所以他们可能只保留长名称,因为如果他们删除它们可能会破坏旧的 code/scripts。
还有Python's built-in abs()
, but really all those functions are doing the same thing. They're even exactly equally fast! (This is not the case for other functions, like 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()
Numpy 提供通过
定义的np.absolute
and the alias np.abs
from .numeric import absolute as abs
这似乎明显违反了 the zen of python:
There should be one-- and preferably only one --obvious way to do it.
所以我猜这是有充分理由的。
我个人几乎在我的所有代码中都使用了 np.abs
并查看了例如Stack Overflow 上 np.abs vs np.absolute 的搜索结果数量似乎绝大多数人都这样做(2130 对 244 次点击)。
有什么理由我应该在我的代码中优先使用 np.absolute
而不是 np.abs
,还是我应该使用更多 "standard" np.abs
?
可能是因为有一个同名的内置函数,abs
。 np.amax
、np.amin
和np.round_
也是如此。
NumPy 函数的别名 abs
, min
, max
and round
仅在顶级包中定义。
所以np.abs
和np.absolute
是完全一样的。使用哪一个都没有关系。
短名称有几个优点:它们更短并且为 Python 程序员所知,因为名称与内置 Python 函数相同。所以最终用户更容易(更少输入,更少记住)。
但也有不同名称的原因:NumPy(或更一般的第 3 方包)有时需要 Python 函数 abs
、min
等。所以在package 他们定义了不同名称的函数,所以你仍然可以访问 Python 函数——而且只是在包的顶层你公开了 "shortcuts"。注意:在这种情况下,不同的名称并不是唯一可用的选项:如果隐藏了内置名称,可以使用 Python 模块 builtins
来访问内置函数。
也可能是这种情况(但这纯粹是我的猜测)它们最初只包含长名称函数 absolute
(等等),后来才添加短别名。作为一个大型且使用良好的库,NumPy 开发人员不会轻易删除或弃用一些东西。所以他们可能只保留长名称,因为如果他们删除它们可能会破坏旧的 code/scripts。
还有Python's built-in abs()
, but really all those functions are doing the same thing. They're even exactly equally fast! (This is not the case for other functions, like 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()