1. Assume a vector V which is (P X 1) array.
  2. Assume matrices A,B which is (M X N X P) array.
I want to multiply A(i, j, :) .* V for each 0 < i <= M , and 0 < j <= N.
Currently I'm using loops to make it happen:
for ii = 1 : M
for jj = 1 : N
B(ii, jj, :) = V.* squeeze(A(ii, jj, :));
end
end
Is there any way to do so which doesn't include any use of loops?

1 Kommentar

madhan ravi
madhan ravi am 18 Dez. 2018
How about this?
a= rand(3,2,3); %M X N XP
V=rand(2,1); %P X 1
A=permute(a,[3 2 1])
A(:,:,1) * V % V multiplied with first page?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Jan
Jan am 18 Dez. 2018
Bearbeitet: Jan am 18 Dez. 2018

2 Stimmen

B = A .* reshape(V, [1, 1, numel(V)])
This works with auto-expanding since R2016b.

3 Kommentare

Nitai Fingerhut
Nitai Fingerhut am 18 Dez. 2018
seems like it works!
thanks!
Matt J
Matt J am 18 Dez. 2018
@Nitai, you should Accept-click Jan's solution, since it solves your problem.
Jan
Jan am 18 Dez. 2018
You are welcome. Matlab makes it easy to suggest such a compact and efficient solution.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Gefragt:

am 18 Dez. 2018

Kommentiert:

Jan
am 18 Dez. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by