2016-11-28 9 views
1

Предположим, что у вас есть сотни массивов numpy, и вы хотите рассчитать корреляцию между ними. Я вычислил его с помощью вложенных циклов. Но выполнение потребовало огромного времени (20 минут!). Один из способов сделать этот расчет более эффективным - рассчитать одну половину диагонали корреляционной таблицы, скопировать ее в другую половину и сделать диагональную линию равной 1. Я имею в виду, что корреляция (x, y) = корреляция (y, x), а корреляция (x, x) всегда равна 1. Однако с этими исправлениями код также займет много времени (около 7-8 минут). Любые другие предложения?Таблица корреляции

My code 
for x in data_set: 
    for y in data_set: 
     correlation = np.corrcoef(x,y)[1][0] 
+0

Вы считаете использование ['multiprocessing'] (https://docs.python.org/3/library/multiprocessing.html), поскольку это довольно параллельная проблема? – CoryKramer

+0

Нет, я ничего не знаю об этом пакете. Можете ли вы написать более быстрое решение этой проблемы с помощью многопроцессорной обработки? –

+0

Можете ли вы объяснить, что такое набор данных, возможно, предоставляя минимальный воспроизводимый пример? – FLab

ответ

1

Я совершенно уверен, что вы можете достичь должен быстрее результатов, создав массив 2-D и расчет его корреляционную матрицы (в отличии от расчета попарных корреляций по одному).

Из документации corpcoef от numpy вход может быть: «1-D или 2-D массив, содержащий несколько переменных и наблюдений. Каждая строка m представляет собой переменную, а в каждом столбце - одно наблюдение за всеми этими переменными». https://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html

+0

Хорошая идея! Я подумаю об этом. –