Ускорить расчет в np.array - PullRequest
0 голосов
/ 28 мая 2020

Следующие настройки: Normkurven - это значения на каждый день года для разных классов. Здесь у меня есть переменная с именем Norm, которая представляет собой pandas .DataFrame () с 13 классами в качестве столбцов и 365 строками

NDVI - это массив (всего 102x3600x3600) в этом случае для ускорения формы составляет (102x300x300), тогда как 102 - это 102 дня, когда я получил данные. 300x300 - это квадрат в середине интересующей меня области. Я сгладил массив, чтобы уменьшить необходимость индексации.

Моя цель - вычислить сходство каждого пикселя для каждого класса и сохранить класс с наибольшим сходством в списке.

import numpy as np
from operator import itemgetter
import similaritymeasures as sim
from time import time

Classification = []   


t0 = time()
for i in range(NDVI.shape[1]):
    TS = np.zeros((len(DOY),2))
    TS[:,0] = np.arange(1,len(DOY)+1,1)
    TS[:,1] = NDVI[:,i]
    TS = TS[~np.isnan(TS[:,1])]
    results = []

    if TS.size == 0:
        Classification[0,i] = "No data"
    else:
        for j in Norm:
            Norm_arr = np.zeros((365,2))
            Norm_arr[:,0] = np.arange(1,366,1)
            Norm_arr[:,1] = Norm[j].to_numpy()
            diff = sim.frechet_dist(TS,Norm_arr)
            results.append((j, diff))
        results.sort(key = itemgetter(1))
        Classification.append() = results[0][0]
    print(i)
print((time()-t0)/60)

Как видите, я перебираю каждую ячейку и каждый класс и вычисляю сходства. Я хочу протестировать разные методы измерения подобия и сравнить результаты. Первым методом был sim.pcm (), который рассчитывался в течение 3 часов, но за ночь frechet_distance заняла около 8 часов для 2000 ячеек, что очень много.

Можно ли реструктурировать мой код, чтобы он делал то, что есть, но намного быстрее?

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