У меня есть вложенный цикл for, который перебирает строки матрицы весов и применяет logsumexp к верхней треугольной части внешней матрицы сложения из этих строк весов.Это очень медленно, поэтому я пытаюсь выяснить, как ускорить это путем векторизации или удаления циклов вместо матричных операций.
'''
Wm: weights matrix, nxk
W: updated weights matrix, nxn
triu_inds: upper triangular indices of Wxy outer matrix
'''
for x in range(n-1):
wx = Wm[x, :]
for y in range(x+1, n):
wy = Wm[y, :]
Wxy = np.add.outer(wx, wy)
Wxy = Wxy[triu_inds]
W[x, y] = logsumexp(Wxy)
logsumexp: вычисляет журнал суммы экспонент входного массива
a: [1, 2, 3]
logsumexp(a) = log( exp(1) + exp(2) + exp(3) )
Входные данные Wm - это матрица весов измерений nxk.K представляет местоположения датчика пациента, а n представляет все такие возможные местоположения датчика.Значения в Wm в основном показывают, насколько датчик пациента находится близко к известному датчику.
пример:
Wm = [1 2 3]
[4 5 6]
[7 8 9]
[10 11 12]
wx = [1 2 3]
wy = [4 5 6]
Wxy = [5 6 7]
[6 7 8]
[7 8 9]
triu_indices = ([0, 0, 1], [1, 2, 2])
Wxy[triu_inds] = [6, 7, 8]
logsumexp(Wxy[triu_inds]) = log(exp(6) + exp(7) + exp(8))