0

У меня есть группы скаляры и матрицам respertively:Как получить среднее значение взвешенных матриц без цикла?

w1, w2...wn 
A1, A2... An 

Как получить

w1*A1 + w2*A2 + ... + wn*An 

без цикла? И как эффективно получить

w1*(b1*c1) + w2*(b2*c2) + ... + wn*(bn*cn) 

Где bi и ci векторы, но bi*ci является матрица, а не скалярная?

+0

вы пробовали просто введите то, что вы написали (например, 'w1 * A1 + w2 * A2 + ... + Wn * An') ИНТ o Matlab? Это основные операции матрицы Matlab: [times] (https://se.mathworks.com/help/matlab/ref/mtimes.html) и [plus] (https://se.mathworks.com/help/matlab/ref /plus.html). – NLindros

+0

maeby я должен создать вектор 'w' из' wi' и матрицы 'A' из rehaped' Ai', и после этого использовать 'bsxfun', но есть ли другой способ без изменения? – user7484269

ответ

0

Редактировать: У меня есть лучшее решение.

Если матрицы An хранятся в 3-D матрицы размера P x Q x N таким образом, что An = A(:,:,n) в течение n = 1, 2, ..., N и ваши веса хранятся в весовой вектор w размера 1 x N то следующая команда делает средневзвешенное:

B = reshape(w*reshape(permute(A,[3,1,2]),N,[]),[P,Q]); 
+0

мой вес хранится в векторе. И вопрос о матричной живописи все еще открыт. Может помнить только ячейку (не для этой задачи) и о преобразовании каждой матрицы в вектор и переносе этих векторов в другую матрицу. – user7484269

+0

Я отредактировал свой ответ. Попробуйте и посмотрите, работает ли это для вас. – Florian

+0

Maeby мне лучше, но лучше использовать манипуляции с индексами вместо того, чтобы изменять, когда используется графический процессор. Спасибо за решение, он работает достаточно хорошо в моей задаче. – user7484269

0

Первая проблема может быть решена путем bsxfun следующим образом:

% create matrices 
a=[1 2] 
b=randi(9,[3 3 2]) 

% now you will have to reshape a, so that its non-singleton dimensions match b 
% i.e. a is 1 x 2 and b is 3 x 3 x 2, so second dimension of (=2) should match 
% 3rd dimension of b (=2). Thus a should be of shape `1 x 1 x 2`. Then you can 
% multiply using bsxfun and sum along 3rd dimension as follows 

sum(bsxfun(@times, permute(a,[3 1 2]), b),3) 
+0

спасибо, такое же решение вышли выше. – user7484269

 Смежные вопросы

  • Нет связанных вопросов^_^