Multidimensional matrix multiplication elementwise

1 次查看(过去 30 天)
For sake of simplicity, let’s just say, I have a 10 by 31 by 31 matrix. I want the 10 th pageof the 31 by 31 matrix to be multiplied with a 5139 by 31 matrix giving me a 5139 by 31 matrix as result.i want hadamard or element by element product between the square and rectangular matrix.
Please suggest.
  4 个评论
Raisul Islam
Raisul Islam 2018-7-11
编辑:Raisul Islam 2018-7-11
It’s important to achieve the 5139 rows for all variables. No matter how I change the dimension. Now I know 31 by 31 contains about 961 data or so. But by having that multiplied with 10 gets 9610 data. I need 5139 by 31. Which is much higher. Maybe I can try reshaping with repeat. I don’t know.
James Tursa
James Tursa 2018-7-12
For this small example:
x = reshape(1:18,2,3,3);
y = reshape(1:15,5,3);
what would be the desired result, ? (i.e., show us what the elements of the result would be for this specific case)
result = ...?

请先登录,再进行评论。

回答(1 个)

Prateekshya
Prateekshya 2024-9-3
To perform an element-wise product between a 31x31 matrix and a 5139x31 matrix, you need to ensure that the dimensions align properly for the operation. Since a direct element-wise multiplication is not feasible due to mismatched dimensions, you need to adjust the matrices such that each element of the 31x31 matrix is applied to the corresponding columns of the 5139x31 matrix.
One way to achieve this is to replicate the 31x31 matrix along the first dimension to create a 5139x31x31 matrix which matches the dimensions of the 5139x31 matrix. Here is the code for the same:
% Example matrices
A = rand(31, 31); % 31x31 matrix (10th page of your 3D matrix)
B = rand(5139, 31); % 5139x31 matrix
% Replicate and reshape the 31x31 matrix to match the dimensions of the 5139x31 matrix
% This creates a 5139x31x31 matrix
A_rep = repmat(A, [5139, 1, 1]);
A_rep = reshape(A_rep, [5139,31,31]);
% Reshape B to a 5139x31x1 matrix for broadcasting
B_rep = reshape(B, [5139, 31, 1]);
% Perform element-wise multiplication
% The result is a 5139x31x31 matrix
C = A_rep .* B_rep;
% If you want a 5139x31 matrix as the final result, you might need to
% sum or average across the third dimension, depending on your specific needs.
% For example, summing across the third dimension:
result = sum(C, 3);
% Display the size of the result
disp(size(result)); % Should be [5139, 31]
This approach assumes that you want to apply each element of the 31x31 matrix across the corresponding columns of the 5139x31 matrix. You can adjust the final step according to your specific requirements for combining the results.
Thank you.

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by