Как получить сумму взвешенных векторов "тензорного умножения" без петли?

У меня есть группы скаляров и две группы векторов соответственно:

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) вместо.

Другие вопросы по тегам