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

4 vues (au cours des 30 derniers jours)
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 commentaires
madhan ravi
madhan ravi le 23 Sep 2019
Why did you delete the previous question?
nima
nima le 23 Sep 2019
So sorry. I think this question is more general that previous one to solve my problem.

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 23 Sep 2019
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 commentaires
Matt J
Matt J le 23 Sep 2019
Modifié(e) : Matt J le 23 Sep 2019
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).

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by