# Is it possible to multiply a 3D matrix with a coumn vector?

157 views (last 30 days)

Show older comments

##### 0 Comments

### Answers (4)

Jan
on 31 Mar 2017

Edited: Jan
on 31 Mar 2017

With Matlab >= 2016b:

A = rand(3, 3, 1000);

b = rand(3, 1);

C = squeeze(sum(A .* reshape(b, 1, 3), 2));

With older versions:

C = squeeze(sum(bsxfun(@times, A, reshape(b, 1, 3)), 2))

##### 3 Comments

Richard
on 19 Feb 2020

A = rand(3, 3, 1e6);

B = rand(3, 1);

tic, C = zeros(3, size(A, 3));

for i = 1:size(A, 3)

C(:,i) = A(:,:,i)*B ;

end, toc

tic; C = reshape(reshape(permute(A,[2,1,3]),3,[]).'*B,3,[]); toc

tic; C = squeeze(sum(bsxfun(@times, A, reshape(B, 1, 3)), 2)); toc

Elapsed time is 0.891301 seconds. % Loop

Elapsed time is 0.082350 seconds. % permute

Elapsed time is 0.088938 seconds. % sum(times())

Matlab 2019b Update 3

KSSV
on 31 Mar 2017

A = rand(3,3,3) ;

B = rand(3,1) ;

C = zeros(3,3) ;

for i = 1:3

C(:,i) = A(:,:,i)*B ;

end

Tyler R
on 26 May 2017

Edited: Tyler R
on 26 May 2017

I got confused because some of the dimensions are size 3, but there is also a 3rd dimension, so for generalization's sake:

N = 150;

K = 20;

T = 30;

A = rand(N,K,T);

B = rand(K,1);

C = zeros(N,T);

Andrei's method:

C = reshape(reshape(permute(A,[2 1 3]),K,[]).'*B,N,[]);

Jan's method:

C = squeeze(sum(A .* reshape(B, 1, K), 2));

KSSV's method:

for t = 1:T

C(:,t) = A(:,:,t)*B ;

end

##### 1 Comment

Roman Gorlov
on 28 Jan 2021

### See Also

### Community Treasure Hunt

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

Start Hunting!