Effacer les filtres
Effacer les filtres

Extend a vector by extending its elements

24 vues (au cours des 30 derniers jours)
f10w
f10w le 29 Mai 2014
Commenté : f10w le 29 Mai 2014
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

Udit Gupta
Udit Gupta le 29 Mai 2014
Modifié(e) : Udit Gupta le 29 Mai 2014
If your vector is X.
reshape(repmat(X,d,1),1,[])
should do the trick.
Example -
>> X = [1 2 3 4];
>> d=4;
>> reshape(repmat(X,d,1),1,[])
ans =
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
  3 commentaires
Udit Gupta
Udit Gupta le 29 Mai 2014
reshape(repmat(X,d,1),[],1) will give you a column vector. But in this case you will have to transpose the original vector. SO you will apply -
reshape(repmat(X',d,1),[],1)
f10w
f10w le 29 Mai 2014
Thanks, Udit!

Connectez-vous pour commenter.

Plus de réponses (3)

George Papazafeiropoulos
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
f10w le 29 Mai 2014
Thanks, George. I will compare with Udit's solution and get back to you.

Connectez-vous pour commenter.


Jos (10584)
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)
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
f10w le 29 Mai 2014
Thanks, Jos. I will compare with Udit's solution and get back to you.

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by