Multi dimensional array scaling

2 views (last 30 days)
mark
mark on 19 Jan 2014
Commented: mark on 20 Jan 2014
Given the matrix A (where A is X by Y by Z matrix. Scale the matrix A such that every element in the kth page is scaled by 5k for k = 1,2,3...Z.
I would have to produce a matrix B such that with element wise multiplication with matrix A it gives me the scaled version.
I have tried messing around with repmat and reshape functions but I can't seem to get it

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 19 Jan 2014
Edited: Azzi Abdelmalek on 19 Jan 2014
[n,m,p]=size(A)
out=5*reshape(repmat(1:p,n*m,1),size(A)).*A

More Answers (1)

Jan
Jan on 19 Jan 2014
Edited: Jan on 19 Jan 2014
What about starting will a simple loop:
s1 = 10;
s2 = 20;
s3 = 30;
A = rand(s1, s2, s3);
B = A;
for k = 1:s3
B(:, :, k) = B(:, :, k) * 5 * k;
end
Later on I'd prefer bsxfun:
B = bsxfun(@times, A, reshape(5:5:5*s3, 1, 1, s3))

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!