how to multiply every single element in a matrix to entire of another matrix?

4 次查看(过去 30 天)
Hello.
I want to multiply every single element in a matrix to entire of another matrix.
x = [100,500,900,1300,1700;
120,600,1080,1560,2040;
140,700,1260,1820,2380;
160,800,1440,2080,2720;
180,900,1620,2340,3060];
z = rand (4,20);
I want to multiply 100 to entire z and then 500 and so on... but when each multipication occured saved it in new indexed parameter.
how can I do this?

采纳的回答

Paul
Paul 2024-4-7
Here's one option to store each result in a cell array that's the same size as x
x = [100,500,900,1300,1700;
120,600,1080,1560,2040;
140,700,1260,1820,2380;
160,800,1440,2080,2720;
180,900,1620,2340,3060];
%z = rand (4,20);
z = [1 2;3 4]; % small z for example
S = cellfun(@(x) x*z,mat2cell(x,ones(1,size(x,1)),ones(1,size(x,2))),'Uni',false)
S = 5x5 cell array
{2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double}
% check
S{1,1} - x(1,1)*z
ans = 2x2
0 0 0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
S{3,3} - x(3,3)*z
ans = 2x2
0 0 0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
  6 个评论
Bruno Luong
Bruno Luong 2024-4-7
编辑:Bruno Luong 2024-4-7
Shorter
x = [100,500,900,1300,1700;
120,600,1080,1560,2040;
140,700,1260,1820,2380;
160,800,1440,2080,2720;
180,900,1620,2340,3060];
%z = rand (4,20);
z = [1 2;3 4]; % small z for example
S = arrayfun(@(xij) xij*z,x,'Uni',false)
S = 5x5 cell array
{2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double}

请先登录,再进行评论。

更多回答(2 个)

Steven Lord
Steven Lord 2024-4-7
If you're asking can you dynamically create variables with numbered names like x1, x2, x3, etc.? Yes.
Should you do this? The general consensus is no. That Discussions post explains why this is generally discouraged and offers several alternative approaches.
One such approach is to use pages of a 3-dimensional array.
x = [100,500,900,1300,1700;
120,600,1080,1560,2040;
140,700,1260,1820,2380;
160,800,1440,2080,2720;
180,900,1620,2340,3060];
z = rand (4,20);
zv = reshape(z, 1, 1, []);
result = x.*zv;
To check:
isequal(result(:, :, 42), x.*z(42))
ans = logical
1

Bruno Luong
Bruno Luong 2024-4-7
编辑:Bruno Luong 2024-4-7
x = [100,500,900,1300,1700;
120,600,1080,1560,2040;
140,700,1260,1820,2380;
160,800,1440,2080,2720;
180,900,1620,2340,3060];
%z = rand (4,20);
z = [1 2;3 4]; % small z for example
[mx,nx] = size(x);
[mz,nz] = size(z);
C = mat2cell(kron(x,z),repelem(mz,mx),repelem(nz,nx))
C = 5x5 cell array
{2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double} {2x2 double}

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by