Matlab - Умножение матрицы на каждую матрицу трехмерной матрицы

У меня есть два вопроса matlab, которые кажутся тесно связанными.

Я хочу найти наиболее эффективный способ (без цикла?) Для умножения матрицы (A x A) на каждую матрицу трехмерной матрицы (A x A x N). Кроме того, я хотел бы проследить каждый из этих продуктов.http://en.wikipedia.org/wiki/Matrix_multiplication#Frobenius_product

Это внутренний продукт Фробениуса. В дрянном коде, который я имею ниже, я использую его вторичное определение, которое более эффективно.

Я хочу умножить каждый элемент вектора (N x 1) на его «соответствующую» матрицу 3d-матрицы (A x A x N).

function Y_returned = problem_1(X_matrix, weight_matrix)

% X_matrix is the randn(50, 50, 2000) matrix
% weight_matrix is the randn(50, 50) matrix

[~, ~, number_of_matries] = size(X_matrix);
Y_returned = zeros(number_of_matries, 1);
for i = 1:number_of_matries
%     Y_returned(i) = trace(X_matrix(:,:,i) * weight_matrix');
    temp1 = X_matrix(:,:,i)';
    temp2 = weight_matrix';
    Y_returned(i) =  temp1(:)' * temp2(:);
end
end


function output = problem_2(vector, matrix)

% matrix is the randn(50, 50, 2000) matrix
% vector is the randn(2000, 1) vector

[n1, n2, number_of_matries] = size(matrix);
output = zeros(n1, n2, number_of_matries);
for i = 1:number_of_matries
    output(:, :, i) = vector(i) .* matrix(:, :, i);
end
output = sum(output, 3);

end

Ответы на вопрос(1)

Ваш ответ на вопрос