numpy中的vectorize和frompyfunc有什么区别?两者看起来非常相似。它们各自的典型用例是什么?
Edit:正如JoshAdel所指出的,类vectorize似乎是建立在frompyfunc之上的。(参见源代码)。我仍然不清楚frompyfunc是否可能有vectorize没有覆盖的用例...
vectorize
frompyfunc
koaltpgm1#
正如JoshAdel所指出的,vectorize Package 了frompyfunc。矢量化增加了额外的特性:
`
>>> 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)
hgncfbus2#
我不确定每一个的不同用例是什么,但是如果您查看源代码(/numpy/lib/function_base.py),您将看到vectorize Package 了frompyfunc。我对代码的阅读主要是vectorize对输入参数进行了正确的处理。在某些特定的情况下,您可能更喜欢其中一种,但是看起来frompyfunc只是vectorize的较低级别示例。
xwbd5t1u3#
尽管这两种方法都提供了构建自己的 * uunc * 的方法,但 * numpy. frompyunc * 方法始终返回python对象,而在使用 * numpy. vectorize * 方法时,您可以指定返回类型
3条答案
按热度按时间koaltpgm1#
正如JoshAdel所指出的,
vectorize
Package 了frompyfunc
。矢量化增加了额外的特性:**编辑:**经过一些简短的基准测试后,我发现对于大型阵列,
vectorize
比frompyfunc
要慢得多(约50%)。如果性能在您的应用程序中很关键,请首先对您的用例进行基准测试。`
`
hgncfbus2#
我不确定每一个的不同用例是什么,但是如果您查看源代码(/numpy/lib/function_base.py),您将看到
vectorize
Package 了frompyfunc
。我对代码的阅读主要是vectorize
对输入参数进行了正确的处理。在某些特定的情况下,您可能更喜欢其中一种,但是看起来frompyfunc
只是vectorize
的较低级别示例。xwbd5t1u3#
尽管这两种方法都提供了构建自己的 * uunc * 的方法,但 * numpy. frompyunc * 方法始终返回python对象,而在使用 * numpy. vectorize * 方法时,您可以指定返回类型