Если у вас есть только небольшое число возможных значений элементов в A
(как в примере на вопрос, где есть только три значения, -1
, 0
и 1
) вы могли цикл через них и использовать следующие несколько шагов получить длины разных последовательностей.
Вот пример проверки A == -1
:
A = [1 1 -1 -1 -1 -1 -1 0 1 -1 -1 -1 -1 1 1 -1 -1 1 0 1 1];
B = [0, A==-1, 0];
Используйте функцию diff()
, чтобы найти начало и конец каждой последовательности и вычесть два вектора, чтобы получить длину последовательности.
>> C = find(diff(B)==-1)-find(diff(B)==1)
C =
5 4 2
Здесь мы можем видеть, что есть одна последовательность длиной пять, а затем один из длины четыре и один из двух Lenth. Мы могли бы также использовать histc()
, чтобы получить частоту этих длин в векторе.
>> D = histc(C,1:max(C))
D =
0 1 0 1 1
Повторяя процедуру с другим значением, например, проверка B = [0, A==1, 0];
дает нам:
C =
2 1 2 1 2
D =
2 3
StackOverflow не сервис-код письма. Пожалуйста, прочитайте [руководство по заданию хорошего вопроса] (http://tinyurl.com/so-hints) и покажите [то, что вы пробовали] (http://whatyouhavetried.com). Вы также можете объяснить, какой язык программирования вы используете. –
Я использую Matlab, и я попытался использовать функцию ismember, чтобы найти набор в целевом массиве, однако он не дал мне количество последовательностей, встроенных в мой целевой массив. Есть ли какая-то конкретная функция, которой я не хватает? – user2060814
Почему вы просто не перебираете массив и не отслеживаете статус при прогрессе? –