【问题标题】:@njit issues with iterable definition for min function@njit 与 min 函数的可迭代定义有关
【发布时间】:2018-08-07 15:33:14
【问题描述】:

我正在尝试定义一个@njit 函数,该函数在多个点需要计算最小值。按以下方式执行此操作:

min(arg1, arg2,...)

但是,当我去计算一个可迭代对象的最小值时,无论该可迭代对象是如何定义的,我似乎都遇到了问题。我用下面的一个小函数复制了这个:

itrbl = [5.0, 0.4, 4.5, 3.5, 6.4]

@njit
def funct(itrbl):
    return min(itrbl)

funct(itrbl)

并得到以下错误:

TypingError: Invalid usage of Function(<built-in function min>) with parameters (reflected list(float64))
  * parameterized

当我将itrbl 构造为一个数组时,它似乎也不喜欢......我需要如何构造itrbl 才能使这个简单的函数起作用?

【问题讨论】:

  • 你应该尝试使用 numpy 数组。
  • 如果我将 irtbl 转换为 numpy 数组 'itrbl=np.array([5.0, 0.4, 4.5, 3.5, 6.4])' 我得到错误 'Invalid usage of Function() 带参数 (array(float64, 1d, C)) * 参数化'
  • 它是否与 numpy 的 min 函数一起使用?
  • 是的。确实如此。谢谢@pbreach。所以我只需要一个带有 np.min 的 numpy 数组来计算一个可迭代的最小值,我可以使用内置的 min 函数来计算几个 args 的最小值。
  • 使用元组与min一起工作,所以itrbl = (5.0, 0.4, 4.5, 3.5, 6.4)

标签: python list min numba


【解决方案1】:

njitted 函数中,函数调用被这些函数的 numba 版本替换。因此,当您调用 min 时,它不是 Python 的 min 函数。

numba 通常也针对numpy.arrays 而不是lists 进行了优化。当您将 list 传递给 numba njitted 函数(来自 Python)或从 njitted 函数(到 Python)返回 list 时,它必须将整个列表转换(复制)为反射返回时列表或其他方式(Why is passing a list (of length n) to a numba nopython function an O(n) operation)。因此,您应该避免将 Python 列表传递给 numba 函数或返回它们。但是,在 numba 函数中创建列表并将其传递给其他 numba 函数不会受到这种转换开销的影响。

但这一点除了关于 numba 函数中的 listmin 的实际问题之外。看起来 min 的 numba 版本不支持列表/数组(但它确实支持元组)。

您可以轻松创建支持列表的 numba 函数:

from numba import njit

@njit
def my_min(lst):
    "Don't pass empty arrays/lists to this function!"
    min_ = lst[0]
    for item in lst:
        if item < min_:
            min_ = item
    return min_

这似乎有效:

from numba import njit

@njit
def funct(itrbl):
    return my_min(itrbl)

>>> funct([5.0, 0.4, 4.5, 3.5, 6.4])
0.4

但是更好的方法是在数字函数中使用arrays。原因是,根据我使用 numba 的经验,您经常会遇到 numba 不支持列表(例如 min)或在列表上调用方法相对较慢的情况。此外,将列表传递给 numba 函数或从 numba 函数返回它们的开销可能是巨大的(并且是意料之外的)。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2019-04-15
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多