将numba guvectorize输出数组初始化为零

时间:2017-05-04 13:39:27

标签: python numpy numba

我正在尝试创建一个guvectorize函数,它迭代数据并在输出矩阵中随时更改单元格的值。问题是,当nopython = True时,我无法将输出矩阵初始化为零,并且输出最终包含无意义的数字。

import numpy as np
from numba import guvectorize

@guvectorize(['void(float64[:], float64[:], int8[:])'], '(n),(n)->(n,n)', nopython=True)
def test(array_1, array_2, res):
    res[:] = 0
    for i in range(array_1.size):
        if array_1[i] > 1:
            res[i] += 1

a = np.float64(np.random.randint(0, 2, (6)))
b = np.float64(np.random.randint(0, 2, (6)))
c = test(a, b)

print(c)

输出:

[[   0    3 -126    4    0    0]
 [   0    0    0   53   26    2]
 [   0    0    0    0    0   53]
 [   0    2    0    0    0    0]
 [   0   59   33    2    0    0]
 [   0    0   56   91   58   93]]

当nopython = False时,这会给出正确的输出,但是后来我失去了大量的处理速度。

我可以在代码开头迭代初始化为零(代替res [:])来解决问题:

for i in range(unique_years.size):
    for j in range(window_sizes.size):
        res[i, j] = 0

但这似乎是单声道的,可能比简单的演员要慢。使用res [:,:]会引发一个转换错误。

0 个答案:

没有答案