I have two matlab questions that seem closely related.
I want to find the most efficient way (no loop?) to multiply a (A x A) matrix with every single matrix of a 3d matrix (A x A x N). Also, I would like to take the trace of each of those products. http://en.wikipedia.org/wiki/Matrix_multiplication#Frobenius_product
This is the inner frobenius product. On the crappy code I have below I'm using its secondary definition which is more efficient.
I want to multiply each element of a vector (N x 1) with its "corresponding" matrix of a 3d matrix (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
I assume you mean element-wise multiplication:
来源:https://stackoverflow.com/questions/21031256/matlab-multiplying-a-matrix-with-every-matrix-of-a-3d-matrix