numpy中frompyfunction和向量化之间的差异

dldeef67  于 2022-11-29  发布在  其他
关注(0)|答案(3)|浏览(128)

numpy中的vectorize和frompyfunc有什么区别?
两者看起来非常相似。它们各自的典型用例是什么?

Edit:正如JoshAdel所指出的,类vectorize似乎是建立在frompyfunc之上的。(参见源代码)。我仍然不清楚frompyfunc是否可能有vectorize没有覆盖的用例...

koaltpgm

koaltpgm1#

正如JoshAdel所指出的,vectorize Package 了frompyfunc。矢量化增加了额外的特性:

  • 从原始函数复制文档字符串
  • 允许您从广播规则中排除参数。
  • 返回正确dtype的数组,而不是dtype=object
    **编辑:**经过一些简短的基准测试后,我发现对于大型阵列,vectorizefrompyfunc要慢得多(约50%)。如果性能在您的应用程序中很关键,请首先对您的用例进行基准测试。

`

>>> a = numpy.indices((3,3)).sum(0)

>>> print a, a.dtype
[[0 1 2]
 [1 2 3]
 [2 3 4]] int32

>>> def f(x,y):
    """Returns 2 times x plus y"""
    return 2*x+y

>>> f_vectorize = numpy.vectorize(f)

>>> f_frompyfunc = numpy.frompyfunc(f, 2, 1)
>>> f_vectorize.__doc__
'Returns 2 times x plus y'

>>> f_frompyfunc.__doc__
'f (vectorized)(x1, x2[, out])\n\ndynamic ufunc based on a python function'

>>> f_vectorize(a,2)
array([[ 2,  4,  6],
       [ 4,  6,  8],
       [ 6,  8, 10]])

>>> f_frompyfunc(a,2)
array([[2, 4, 6],
       [4, 6, 8],
       [6, 8, 10]], dtype=object)

`

hgncfbus

hgncfbus2#

我不确定每一个的不同用例是什么,但是如果您查看源代码(/numpy/lib/function_base.py),您将看到vectorize Package 了frompyfunc。我对代码的阅读主要是vectorize对输入参数进行了正确的处理。在某些特定的情况下,您可能更喜欢其中一种,但是看起来frompyfunc只是vectorize的较低级别示例。

xwbd5t1u

xwbd5t1u3#

尽管这两种方法都提供了构建自己的 * uunc * 的方法,但 * numpy. frompyunc * 方法始终返回python对象,而在使用 * numpy. vectorize * 方法时,您可以指定返回类型

相关问题