Я пытаюсь выполнить операции с большим массивом типа cupy размером 16000. Я считаю, что математические операции, такие как сложение, выполняются довольно быстро, но индексация с использованием логических масок выполняется относительно медленно. Например, следующий код:
import cupy as cp
arr = cp.random.normal(0, 1, 16000)
%timeit arr * 5
%timeit arr > 0.4
%timeit arr[arr > 0.4] = 0
дает мне вывод:
28 µs ± 950 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
26.5 µs ± 1.61 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
104 µs ± 2.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Есть ли причина, по которой окончательная индексация по крайней мере вдвое медленнее? Я предположил, что умножение должно быть медленнее, чем установка элементов массива.
Обновление : Это не относится к индексированию numpy. Изменяя массив cupy на numpy, я получаю:
6.71 µs ± 373 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
4.42 µs ± 56.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.39 µs ± 29.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)