python - 如何在不调用 `np.vectorize` 的情况下强制广播函数

标签 python numpy array-broadcasting

我想寻找一种强制广播功能的方法。

在某些情况下,函数/方法可能会在以后的实例中被覆盖为常量函数。在这种情况下如果

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/

相关文章:

python - 在单行中打印不带括号的列表

python - django Model.objects.raw 将 SUM 字段返回为 Decimal

python - Flask 中的 Jinja 模板中的未定义属性引发错误

python - matplotlib 中的金字塔 3D 直方图(如 1976 年有关 SVD 的历史电影)

python - 使用 Flask 和 sqlalchemy 插入到 Db2

python - Numpy 广播添加

python - 使用 owlready2 删除个人

python - pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h not found 错误

python - 根据条件替换ndarray的尾部

python - 有条件地对齐两个数据帧,以便导出作为 numpy 条件传入的列,其中