MATLAB: Elementwise Multiplication of column of 3D-array with an 1D-array

elementwise multiplication

Hi, I'm trying to multiply a column of an array with dimensions (3,5,3) with an 1D-array as follows:
B=rand(3,5,3);
k=0:2;
B(1,1,:).*k
Matlab tells me:
Error using .*
Matrix dimensions must agree.
However, the size of the column and the array is always 3. What's wrong with this expression?
Many thanks in advance.

Best Answer

A 1D vector of size [1, 1, 3] (your B(1, 1, :)) is not the same size as a 1D vector of size [1, 3, 1] (your k), even though they have the same number of elements. You either need to squeeze the singleton dimensions out of your B vector, permute the dimensions of k, or reshape either:
squeeze(B(1,1,:) .* k' %squeeze returns a column vector, so transpose k
B(1, 1, :) .* permute(k, [1 3 2]) %swap 2nd and 3rd dimension
reshape(B(1, 1, :), 1, []) .* k
B(1, 1, :) .* reshape(k, 1, 1, []) %same as permute effectively