Extend a vector by extending its elements
19 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Akzeptierte Antwort
Udit Gupta
am 29 Mai 2014
Bearbeitet: Udit Gupta
am 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 Kommentare
Udit Gupta
am 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)
Weitere Antworten (3)
George Papazafeiropoulos
am 29 Mai 2014
Bearbeitet: George Papazafeiropoulos
am 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!
Jos (10584)
am 29 Mai 2014
Bearbeitet: Jos (10584)
am 29 Mai 2014
A slower but nice alternative to repmat:
X = [10 20 30 40]
d = 4
Y = kron(X, ones(1,d))
0 Kommentare
Jos (10584)
am 29 Mai 2014
Bearbeitet: Jos (10584)
am 29 Mai 2014
A fast and also nice alternative:
X = [10 ; 20 ; 30 ; 40]
d = 3
Y = X(ceil((1:d*numel(X))/d))
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!