numpy中的vectorizefrompyfunc有什么区别?

两者看起来非常相似。他们每个人的典型用例是什么?

编辑:正如JoshAdel所指出的,vectorize类似乎建立在frompyfunc之上。 (请参阅the source)。我仍然不清楚frompyfunc是否可能具有vectorize未涵盖的任何用例...

最佳答案

正如JoshAdel指出的那样,vectorize包装了frompyfunc。 Vectorize添加了其他功能:

  • 从原始函数
  • 复制文档字符串
  • 允许您从广播规则中排除参数。
  • 返回正确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)
    

    `

    10-07 12:39