Extend a vector by extending its elements
Afficher commentaires plus anciens
I have a vector of dimension d: (1,2,...,d) (it's (x_1,x_2,...,x_n) but I removed the 'x_' for simplicity). Now I would like to extend it (in a fast manner) to obtain a d*d vector of the form:
(1,1,...,1,2,...,2,...,d,d,...,d)
where each element repeat d times.
I looked at this page: http://www.mathworks.fr/fr/help/wavelet/ref/wextend.html but it seems to me that the function does not handle this kind of extension.
Thank you for your help.
Réponse acceptée
Plus de réponses (3)
George Papazafeiropoulos
le 29 Mai 2014
Modifié(e) : George Papazafeiropoulos
le 29 Mai 2014
If X is a column vector:
% initial data
d=10;
% engine
X=(1:d)';
ind=ones(d^2,1);
ind(d+1:d:d^2)=1-d;
% result
output_vector=X(cumsum(ind))
If X is a row vector:
% initial data
d=10;
% engine
X=1:d;
ind=ones(d^2,1);
ind(d+1:d:d^2)=1-d;
% result
output_vector=X(cumsum(ind))
without the need to reshape or repmat!
1 commentaire
f10w
le 29 Mai 2014
Jos (10584)
le 29 Mai 2014
Modifié(e) : Jos (10584)
le 29 Mai 2014
A slower but nice alternative to repmat:
X = [10 20 30 40]
d = 4
Y = kron(X, ones(1,d))
Jos (10584)
le 29 Mai 2014
Modifié(e) : Jos (10584)
le 29 Mai 2014
A fast and also nice alternative:
X = [10 ; 20 ; 30 ; 40]
d = 3
Y = X(ceil((1:d*numel(X))/d))
1 commentaire
f10w
le 29 Mai 2014
Catégories
En savoir plus sur Share and Distribute Software dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!