Borrar filtros
Borrar filtros

How to create a new column that depends on the stabilization of another

1 visualización (últimos 30 días)
The title is pretty vague so here's my example:
I have a column on a table whose values are true and false (1 for when it's on and 0 for off)
Table.On = [0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1] (and so on)
However, I need a column that will provide stable values, since the first or second or third consecutive 1's, it's still "heating up", so it's only stable on the forth 1.
So I would like to create a new column like this (if it's 0 again it resets the same procedure):
Table.Stable = [0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0] ---- only consecutive 1's after 3 consecutive 1's.
This could be easily done in a for loop or while but I have 90000 rows and thats would take a long time. Is there a way to do this without a for/while loop?
Thank you!!

Respuesta aceptada

Dyuman Joshi
Dyuman Joshi el 2 de Mzo. de 2023
Using find() will be slower than using logical indexing, specially given the number of rows you have
in = [0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1];
out = movsum(in,[3 0])==4
out = 17×1 logical array
0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0

Más respuestas (1)

Cameron el 2 de Mzo. de 2023
Table.On = [0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1];
indx = find(movsum(Table.On,4) == 4) + 1;
Table.Stable = zeros(length(Table.On),1);
Table.Stable(indx) = 1;
  2 comentarios
Cameron el 2 de Mzo. de 2023
@Dyuman Joshi is correct. Using find() is less efficient so use this instead.
Table.On = [0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1];
Table.Stable = movsum(Table.On,[3 0]) == 4;

Iniciar sesión para comentar.


Más información sobre Data Type Conversion 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