Любой способ оптимизировать функции статистики NumPy (например, с помощью Numberxpr)? - PullRequest
2 голосов
/ 07 марта 2012

Мне нужно рассчитать стандартное отклонение и другую статистику на большом многомерном массиве данных точечной сетки.Пример:

import numpy as np
# ... gridded data are read into g1, g2, g3 arrays ...
allg = numpy.array( [g1, g2, g3] )
allmg = numpy.ma.masked_values(allg, -99.)
sd = numpy.zeros((3, 3315, 8325))
np.std(allmg, axis=0, ddof=1, out=sd)

Я видел преимущества в производительности, заключающиеся в том, что на разных веб-сайтах используются обалденные вычисления в numbersxpr.evaluate (), но я не думаю, что есть способ запустить np.std () в Numberxpr.оценить () (поправьте меня, если я ошибаюсь).Есть ли другие способы оптимизировать вызов np.std ()?В настоящее время моей системе требуется около 18 секунд для расчета ... в надежде сделать это намного быстрее ...

1 Ответ

2 голосов
/ 09 марта 2012

Может быть, вы можете использовать многопроцессорность, чтобы выполнить вычисления в несколько процессов.Но прежде чем пытаться это сделать, вы можете попытаться изменить ваши данные, чтобы вы могли вызвать std () для последней оси.Вот пример:

import numpy as np
import time
data = np.random.random((4000, 4000))

start = time.clock()
np.std(data, axis=0)
print time.clock() - start

start = time.clock()
np.std(data, axis=1)
print time.clock() - start

результат на моем компьютере:

0.511926329834
0.273098421142

, поскольку все данные находятся в непрерывной памяти для последней оси, доступ к данным будет использовать кэш CPU большеэффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...