Python / Numpy - Маскированные массивы очень медленные

Могу ли я что-нибудь сделать, чтобы ускорить маскированные массивы в numpy? У меня был ужасно неэффективная функция, которую я переписал, чтобы использовать замаскированные массивы (где я мог просто замаскировать строки вместо копирования и удаления строк, как я делал). Однако я был шокирован, обнаружив, что замаскированная функция была в 10 раз медленнее, потому что замаскированные массивы работают намного медленнее.

В качестве примера возьмем следующее (маскировка для меня более чем в 6 раз медленнее):

import timeit
import numpy as np
import numpy.ma as ma

def test(row):
   return row[0] + row[1]

a = np.arange(1000).reshape(500, 2)
t = timeit.Timer('np.apply_along_axis(test, 1, a)','from __main__ import test, a, np')
print round(t.timeit(100), 6)

b = ma.array(a)
t = timeit.Timer('ma.apply_along_axis(test, 1, b)','from __main__ import test, b, ma')
print round(t.timeit(100), 6)
20
задан Jonathan Leffler 4 February 2015 в 15:34
поделиться