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 Comment

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?

Sign in to comment.

 Accepted Answer

Jan
Jan on 18 Dec 2018
Edited: Jan on 18 Dec 2018
B = A .* reshape(V, [1, 1, numel(V)])
This works with auto-expanding since R2016b.

3 Comments

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

Sign in to comment.

More Answers (0)

Categories

Asked:

on 18 Dec 2018

Commented:

Jan
on 18 Dec 2018

Community Treasure Hunt

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

Start Hunting!