How to create a new column that depends on the stabilization of another
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Margarida
am 2 Mär. 2023
Kommentiert: Margarida
am 2 Mär. 2023
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!!
0 Kommentare
Akzeptierte Antwort
Dyuman Joshi
am 2 Mär. 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
Weitere Antworten (1)
Cameron
am 2 Mär. 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 Kommentare
Cameron
am 2 Mär. 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;
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements 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!