Извлечение фиксированных объемов данных из массива на основе списка индексов

У меня есть массив

a=1:20

и ряд индексов, которые указывают, где я хочу начать извлекать данные:

i=[4,12]

Для каждого индекса iЯ хочу этот индекс и следующие четыре (ну, xдействительно) элементы в столбце или строке. Я не буду приближаться к концу массива, так что особый случай можно игнорировать.

Если бы я жестко запрограммировал это, я мог бы использовать:

a([4:8;12:16])

и это достигнет моего результата.

Но i может иметь много разных значений.

Любые мысли о том, как я могу преобразовать список индексов в матрицу диапазонов, или другие способы решения этой проблемы?

РЕДАКТИРОВАТЬ Я использую Matlab 2007; было бы предпочтительнее, если бы решение опиралось исключительно на внутренние компоненты и наборы инструментов Matlab. bsxfun не присутствует до 2007а.

2 ответа

Решение

Позволять i будь твоим указателем и x количество элементов, которые вы хотите в дополнение к элементам в iтогда вы можете использовать

i = [4 6 8];
x = 4; 

bsxfun(@plus, 0:x, i(:)) 

получить матрицу показателей:

ans =

     4     5     6     7     8
     6     7     8     9    10
     8     9    10    11    12

Если у вас нет доступа к bsxfun ты можешь использовать repmat вместо:

i = [4 6 8];
x = 4; 

repmat(i(:), 1, x+1) + repmat(0:x, length(i), 1)

Вот решение без bsxfun, но с repmat, вдохновленным предыдущим ответом.

i = [4 6 8];
x = 4;
p = repmat(1:x,length(i),1);
q = repmat(i',1,x);
p+q
Другие вопросы по тегам