Есть небольшая проблема с описанием вашей проблемы. Вы говорите, что хотите «выбрать первые 50 элементов последовательности, затем элементы 10-60 ...»; однако это будет означать выбор элементов:
Эта первая последовательность должна быть 0-10, чтобы соответствовать шаблону, который, конечно, в MATLAB не имеет смысла, так как массивы используют одноиндексирование. Чтобы решить эту проблему, приведенный ниже алгоритм использует переменную с именем startIndex , чтобы указать, с какого элемента начинать выборку последовательности.
Вы можете сделать это векторизованным способом, создав индексный массив. Создайте вектор, состоящий из начальных индексов каждой последовательности. Для повторного использования в качестве переменных я указал длину последовательности, размер шага между запусками последовательности и начало последней последовательности. В примере, который вы описываете, длина последовательности должна быть 50, размер шага должен быть 10, а начало последней последовательности зависит от размера входных данных и ваших потребностей.
>> startIndex = 10;
>> sequenceSize = 5;
>> finalSequenceStart = 20;
Создать пример данных:
>> sampleData = randi(100, 1, 28)
sampleData =
Columns 1 through 18
8 53 10 82 82 73 15 66 52 98 65 81 46 44 83 9 14 18
Columns 19 through 28
40 84 81 7 40 53 42 66 63 30
Создать вектор начальных индексов последовательностей:
>> sequenceStart = startIndex:sequenceSize:finalSequenceStart
sequenceStart =
10 15 20
Создать массив индексов для индексации в массив данных:
>> index = cumsum(ones(sequenceSize, length(sequenceStart)))
index =
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
>> index = index + repmat(sequenceStart, sequenceSize, 1) - 1
index =
10 15 20
11 16 21
12 17 22
13 18 23
14 19 24
Наконец, используйте этот индексный массив для ссылки на массив данных:
>> sampleData(index)
ans =
98 83 84
65 9 81
81 14 7
46 18 40
44 40 53