Следующие настройки: 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 ячеек, что очень много.
Можно ли реструктурировать мой код, чтобы он делал то, что есть, но намного быстрее?