How to copy a 2d matrix along higher dims e.g. 3rd up to 6th without using for loop?

In general how we can copy an N-dim matrix along higher dims (N+1, N+2, ..) without for loop?
I'm sure we can use repmat to copy a 2D matrix a 3 times along the 3rd dim e.g. (a,[1 1 3]) but I don't know can it work for higher dims.

2 Comments

So sorry. I think this question is more general that previous one to solve my problem.

Sign in to comment.

 Accepted Answer

repmat can be used to copy along more than one dimension, e.g.,
>> repmat(3,4,5)
ans =
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
3 3 3 3 3
The real question is why you would want to do that. You would be consuming more memory without storing any new information. For most purposes, repmat can be avoided.

3 Comments

Thank u so much.
It's needed to calculate .
if be a 4D matrix, then it is benificial to copy along 3rd and 4th dim and multiply it to and then sum it which is more time consuming than using for loop.
repmat is not necessary for that. It is far more efficient to reshape this into a matrix-vector multiplication:
[L,M,N,P]=size(b);
B=reshape(b,L*M,N*P);
C=a(:).'*B;
c=reshape(C,L,M);
Note that this involves neither for-loops nor data copying (reshape does not copy any data).

Sign in to comment.

More Answers (0)

Categories

Asked:

on 23 Sep 2019

Commented:

on 24 Sep 2019

Community Treasure Hunt

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

Start Hunting!