Как получить сумму взвешенных векторов "тензорного умножения" без петли?
У меня есть группы скаляров и две группы векторов соответственно:
w1, w2... wn
b1, b2... bn
c1, c2... cn
w1, w2... wn
скаляры и хранятся в w
,b1, b2... bn
Хранится в B
а такжеc1, c2... cn
Хранится в C
, Как эффективно получить
w1*(b1*c1') + w2*(b2*c2') + ... + wn*(bn*cn')
куда bi
а также ci
векторы, но bi*ci'
матрица, а не скаляр? Размеры: 1 x N
за w
, P x N
за B
а также Q x N
за C
, wi = w(i)
, bi = B(:, i)
а также Ci = C(:, i)
1 ответ
Просто:
result = B*diag(W)*C';
Если N
намного больше чем P
а также Q
Вы могли бы предпочесть вычислить матрицу весов diag(W)
в его редкой форме с spdiags(W', 0, N, N)
вместо.