在numba jitted nopython函数内部,我需要使用另一个数组内部的值对数组进行索引。这两个数组都是numpy数组浮点数。

例如

@numba.jit("void(f8[:], f8[:], f8[:])", nopython=True)
def need_a_cast(sources, indices, destinations):
    for i in range(indices.size):
        destinations[i] = sources[indices[i]]

我的代码不同,但是让我们假设这个愚蠢的示例可以重现该问题(即,我不能拥有类型为int的索引)。 AFAIK,我不能在nopython jit函数内部使用int(indices [i])或indexs [i] .astype(“int”)。

我该怎么做呢?

最佳答案

至少使用numba 0.24,您可以执行简单的转换:

import numpy as np
import numba as nb

@nb.jit(nopython=True)
def need_a_cast(sources, indices, destinations):
    for i in range(indices.size):
        destinations[i] = sources[int(indices[i])]

sources = np.arange(10, dtype=np.float64)
indices = np.arange(10, dtype=np.float64)
np.random.shuffle(indices)
destinations = np.empty_like(sources)

print indices
need_a_cast(sources, indices, destinations)
print destinations

# Result
# [ 3.  2.  8.  1.  5.  6.  9.  4.  0.  7.]
# [ 3.  2.  8.  1.  5.  6.  9.  4.  0.  7.]

关于python - 如何在nopython模式下将浮点numpy数组值转换为numba jitted函数中的int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36050578/

10-11 09:25