Azzera filtri
Azzera filtri

Using repelem without prior knowledge of the number of matrix dimensions

2 visualizzazioni (ultimi 30 giorni)
Hello,
I have a matrix A that can be either 3D, 4D, 5D etc. I want to repeat the elements of the last dimension x times. This can be accomplished by using the following expressions: repelem(A,1,1,x) for 3D and repelem(A,1,1,1,x) for 4D matrices. However, since I do not know the number of matrix dimensions in advance, these expressions do not help me. Ideally, I would like to use repelem like repmat e.g. repelem(A,[1,1,x]) for 3D and repelem(A,[1,1,1,x]) for 4D matrices. However these expressions are not valid. I know I can do this combining reshape and repmat but I would like to know if there is a more compact way since there is a repelem function (I would also like to avoid using eval). Any ideas?

Risposta accettata

Stephen23
Stephen23 il 6 Feb 2017
Modificato: Stephen23 il 6 Feb 2017
It is easy to generate a comma separated list from a cell array, and use this to specify the repelem inputs:
x = 10;
C = num2cell([ones(1,ndims(A)-1),x]);
out = repelem(A, C{:})
Note that you will need to consider scalar and column vector A as special cases.

Più risposte (1)

KSSV
KSSV il 6 Feb 2017
Modificato: KSSV il 6 Feb 2017
Use a if condition on length(size(A)). If A is 3D your length(size(A)) will be 3 and you have to use repelem(A,1,1,x). Like wise if A is 4D, length(size(A)) will be 4.
  3 Commenti
KSSV
KSSV il 6 Feb 2017
Let it be..you can generate [1 1 x] using [ones(length(size(A))-1) x]
Emmanouil
Emmanouil il 6 Feb 2017
I know I can do this, this was my initial intention as I write in the question. The problem is that the expression repelem(A,[1,1,x]) is not valid.

Accedi per commentare.

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by