我想寻找一种强制广播功能的方法。
在某些情况下,函数/方法可能会在以后的实例中被覆盖为常量函数。在这种情况下如果
arr = np.arange(0, 1, 0.0001)
f = lambda x: 5
f(arr) # this gives just integer 5, i want [5, 5,..., 5]
我知道像 np.vectorize
这样强制函数广播的方法,但问题是这是低效的,因为它本质上是 for 循环。 (参见 documentation)
我们还可以使用像np.frompyfunc
这样的工厂方法,它允许我们将python 函数转换为numpy 通用函数ufunc
参见here例如。这优于 np.vectorize
,但仍然比内置的 ufunc
方法效率低。
我想知道是否有任何有效的 numpy 方法来处理这个问题,即强制函数广播?
最佳答案
如果有更好的方法来广播任意 Python 函数,numpy.vectorize
会使用它。如果你想让它有效地广播,你真的必须在编写函数时考虑到广播。
在常量函数的特殊情况下,您可以使用 numpy.full
编写广播常量函数:
def f(x):
return numpy.full(numpy.shape(x), 5)
numba.vectorize
也可以比 numpy.vectorize
更有效地向量化函数,但是您需要 Numba,并且您需要以 Numba 可以高效编译的方式编写您的函数。
关于python - 如何在不调用 `np.vectorize` 的情况下强制广播函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56158426/