У меня есть два вектора o
и c
равной длины:
o = [-1 -1 -1 0 0 0 1 1 0 0];
c = [-1 -1 -1 -1 0 1 1 1 0 -1];
o
представляет сигналы открытия (neg или pos), а c
представляет сигналы закрытия, принимая сигнал открытияпредшествовал ему с противоположным знаком.Только один сигнал может быть активным одновременно, поэтому последовательные сигналы должны игнорироваться.В двух вышеупомянутых векторах мой первый сигнал будет в o(1)
, а соответствующий ему сигнал закрытия будет найден в c(6)
.Это также означает, что сигналы открытия в o(2)
и o(3)
должны игнорироваться, и мой следующий сигнал открытия находится в o(7)
с соответствующим закрытием в c(10)
, что приводит к пустому сигналу в o(8)
Я пытаюсь найти векторизованное решение для определения правильной последовательности или индексов открытых / закрытых сигналов, чтобы произвести что-то вроде следующего примера решения:
o = [-1 0 0 0 0 0 1 0 0 0];
c = [ 0 0 0 0 0 1 0 0 0 -1];
Я, очевидно, могу решить эту проблемуциклически просматривая каждый элемент в цикле for, но поскольку мой набор данных может содержать до миллионов элементов, и я считаю, что циклы в Matlab могут быть довольно «дорогими», я был бы очень признателен, если у кого-то есть решение моей проблемы, которое является более матричным.ориентированный или через arrayfun
или что-то подобное, что может сделать код более эффективным?