Я пытаюсь Numba в этом фрагменте кодаNumba медленнее numpy.bitwise_and на булевых массивов
from numba import jit
import numpy as np
from time import time
db = np.array(np.random.randint(2, size=(400e3, 4)), dtype=bool)
out = np.zeros((int(400e3), 1))
@jit()
def check_mask(db, out, mask=[1, 0, 1]):
for idx, line in enumerate(db):
target, vector = line[0], line[1:]
if (mask == np.bitwise_and(mask, vector)).all():
if target == 1:
out[idx] = 1
return out
st = time()
res = check_mask(db, out, [1, 0, 1])
print 'with jit: {:.4} sec'.format(time() - st)
С Numba @jit() декоратора этот код работать медленнее!
- без JIT: 3,16 сек
- с JIT: 3,81 сек
просто, чтобы помочь лучше понять назначение этого кода:
db = np.array([ # out value for mask = [1, 0, 1]
# target, vector #
[1, 1, 0, 1], # 1
[0, 1, 1, 1], # 0 (fit to mask but target == 0)
[0, 0, 1, 0], # 0
[1, 1, 0, 1], # 1
[0, 1, 1, 0], # 0
[1, 0, 0, 0], # 0
])
Посмотрите на код 'array_equal', как показано в моем недавнем ответе, http://stackoverflow.com/a/34486522/901925. – hpaulj
Спасибо @hpaulj Я только что обновил фрагмент, чтобы принять во внимание ваш комментарий – user3313834