Borrar filtros
Borrar filtros

Generate automatically vectors of precise length and given values

12 visualizaciones (últimos 30 días)
Hello
I want to automatically construct a vector of user defined size using a set of elements defined within a second vector by filling the 1st vector linearly.
As a small example
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vector_2 = [1,100,2,100,3,100,4]
length_vector_1 = 12
% vector to be automatically generated
vector_1 = [1,100,2,100,3,100,4,100,1,100,2,100]
length_vector_1 = 3
% vector to be automatically generated
vector_1 = [1,100,2]
Is there a way to generate such vectors ?
Thanks in advance

Respuesta aceptada

José-Luis
José-Luis el 23 de Mayo de 2014
Editada: José-Luis el 23 de Mayo de 2014
vector_2 = [1,100,2,100,3,100,4];
numVal = 19;
your_vec = repmat(vector_2,1,ceil(numVal/numel(vector_2)));
your_vec = your_vec(1:numVal);
Please accept an answer if it helped you.

Más respuestas (1)

Jos (10584)
Jos (10584) el 23 de Mayo de 2014
No need to create an intermediate vector with repmat that could be much longer than the final one. Just use simple indexing into the original vector:
vector_2 = [1,100,2,100,3,100,4];
length_vector_1 = 19;
vector_1 = vector_2(rem(0:length_vector_1 - 1, numel(vector_2))+1)
  2 comentarios
José-Luis
José-Luis el 23 de Mayo de 2014
Here's the trade-off:
vector_2 = rand(1,777777);
numVal = 100000000;
tic
your_vec = repmat(vector_2,1,ceil(numVal/numel(vector_2)));
your_vec = your_vec(1:numVal);
toc
vector_1 = vector_2(rem(0:numVal - 1, numel(vector_2))+1);
toc
Elapsed time is 3.062471 seconds.
Elapsed time is 5.132982 seconds.
Jos (10584)
Jos (10584) el 23 de Mayo de 2014
Indeed, my code is faster!
(You forgot to put a tic …)

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by