2014-09-03 2 views
2

Я не уверен в том, что вы можете увеличить число чисел, чтобы использовать в качестве индекса для извлечения определенных диапазонов в серии чисел в последовательности из 12 чисел. Например, мне нужен индекс, чтобы сделать следующее:Increment MATLAB range

Array1 - массив из 1 строки по 612 столбцов. Мне нужно создать индекс так, чтобы я извлекал значения 8, 9, 10, 11 и 12, а затем увеличивал их на 12, так что следующие столбцы I извлекают 20, 21, 22, 23 и 24 и т. Д. До c . olumn == 612

Мой индекс будет выглядеть следующим образом:

index = [ 8 9 10 11 12 20 21 22 23 24 32 33 34 35 36 ] 

и т.д., чтобы 612.

Я пытался использовать что-то вроде index = [ 8:12:12:612], но это только дает мне [ 8 20 32, etc]

ответ

0

Пусть

S = 12; %// major step (minor step is 1) 
G = 5; %// group size 
I = 8; %// initial value 
F = 612; %// ending value 

Тогда индексы могут быть ген с использованием этого простого подхода mod:

index = find(mod(0:F-1,S)<G)+I-1; 
1

bsxfun подход, основанный на -.

array1 = 8:12; %// Starting array 
sz = 12; %// Stepsize 

Ncols = floor((size(A,2)-array1(1))/sz)+1 %// No. of blocks of indices 
ind1 = bsxfun(@plus,array1.',[0:Ncols-1]*sz) %//' Indices in blocks 
index = ind1(ind1<=size(A,2)); %// Valid indices 

Пример -

A = rand(1,23); %// Random input for demo 
array1 = 1:4; %// Starting array 
sz = 8; %// Stepsize 

Выход -

index = 
    1  2  3  4  9 10 11 12 17 18 19 20