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

4 Ansichten (letzte 30 Tage)
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?

Akzeptierte Antwort

Paul
Paul am 7 Apr. 2024
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 Kommentare
Bruno Luong
Bruno Luong am 7 Apr. 2024
Bearbeitet: Bruno Luong am 7 Apr. 2024
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}

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Steven Lord
Steven Lord am 7 Apr. 2024
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 am 7 Apr. 2024
Bearbeitet: Bruno Luong am 7 Apr. 2024
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}

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by