Spit an array when the value 0 occurs until the value 2

1 visualización (últimos 30 días)
Fabio Taccaliti
Fabio Taccaliti el 29 de Jun. de 2022
Comentada: Walter Roberson el 30 de Jun. de 2022
I have an array time (6700x1) containing all numbers from -8 to 5 in ascending order.
I would like to have a new array (time_new) based on this that contains all value between 0 and 2.
I know that I can just open the array and look at which position the value 0 occurs and at wich index the value 2 and based on this do time(3981:4962). But since I'm dealing with several arrays where the position of these 2 numbers is not always the same I would like to have something more roboust that I can always use without every time open the array and look for the teo index.
Can someone help to with that?
Thanks in advance
  1 comentario
Dyuman Joshi
Dyuman Joshi el 29 de Jun. de 2022
Editada: Dyuman Joshi el 29 de Jun. de 2022
Why do you think finding the position and using the index is not a robust method?
Use logical indexing then. (as @Voss has answered)

Iniciar sesión para comentar.

Respuesta aceptada

Voss
Voss el 29 de Jun. de 2022
% an array time (6700x1) containing numbers from
% -8 to 5 in ascending order:
time = linspace(-8,5,6700).'
time = 6700×1
-8.0000 -7.9981 -7.9961 -7.9942 -7.9922 -7.9903 -7.9884 -7.9864 -7.9845 -7.9825
% time_new based on this that contains
% all value between 0 and 2:
time_new = time(time >= 0 & time <= 2) % use >, < if you want to exclude 0, 2
time_new = 1031×1
0.0010 0.0030 0.0049 0.0069 0.0088 0.0107 0.0127 0.0146 0.0166 0.0185
  4 comentarios
Fabio Taccaliti
Fabio Taccaliti el 30 de Jun. de 2022
Exactly, thanks a lot!
Voss
Voss el 30 de Jun. de 2022
You're welcome!

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 29 de Jun. de 2022
Your request is a bit ambiguous, so I will give two possibilities.
loc0 = find(YourArray == 0, 'first');
%use this
loc2F = find(YourArray == 2, 'first');
subsetF = YourArray(loc0:loc2F-1);
%OR use this
loc2L = find(YourArray == 2, 'last');
subsetL = YourArray(loc0:loc2L);
Now subsetF includes from the first 0 to the last value before the 2. subsetL includes from the first 0 to the last 2. You do not need both of these; I am just not clear which one you want.
Note that this code is not designed to work if there are no 0 or there are no 2.
  3 comentarios
Fabio Taccaliti
Fabio Taccaliti el 30 de Jun. de 2022
Thanks for the answer.
I have this error.
Error using find
Second argument must be a positive scalar integer.
Walter Roberson
Walter Roberson el 30 de Jun. de 2022
loc0 = find(YourArray == 0, 1, 'first');
%use this
loc2F = find(YourArray == 2, 1, 'first');
subsetF = YourArray(loc0:loc2F-1);
%OR use this
loc2L = find(YourArray == 2, 1, 'last');
subsetL = YourArray(loc0:loc2L);

Iniciar sesión para comentar.

Categorías

Más información sobre Downloads en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by