Matlab - Multiplying a matrix with every matrix of a 3d matrix

痴心易碎 提交于 2019-11-27 08:15:48

问题


I have two matlab questions that seem closely related.

  1. 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.

  2. 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
    

回答1:


I assume you mean element-wise multiplication:

  1. Use bsxfun:

    A = 10;
    N = 4;
    mat1 = randn(A,A);
    mat2 = randn(A,A,N);
    result = bsxfun(@times, mat1, mat2);
    
  2. Use bsxfun with permute to align dimensions:

    A = 10;
    N = 4;
    vec1 = rand(N,1);
    mat2 = randn(A,A,N);
    result = bsxfun(@times, permute(vec1,[2 3 1]), mat2);
    


来源:https://stackoverflow.com/questions/21031256/matlab-multiplying-a-matrix-with-every-matrix-of-a-3d-matrix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!