Создать индексный вектор на основе начальных и конечных значений [дубликаты]
На этот вопрос уже есть ответ здесь:
Эффективный оператор двоеточия для нескольких начальных и конечных точек 4 ответаОсновываясь на матрице, которая содержит несколько строк начала (первый столбец) и конца (второй столбец) интервала индекса, я хотел бы создать вектор всего индекса. Например, еслиA = [2 4; 8 11 ; 12 16]
Я хотел бы иметь следующий векторindex = [2 3 4 8 9 10 11 12 13 14 15 16]
.
Я ищу самый быстрый способ сделать это. На данный момент я нашел только две возможности:
1) с петлей
index = [];
for n = 1:size(A, 1)
index = [index A(n, 1):A(n, 2)];
end
2) сarrayfun
index = cell2mat(arrayfun(@(n) A(n, 1):A(n, 2), 1:size(A, 1), 'uni', 0));
Что интересно,arrayfun
намного быстрее, чем версия цикла, и я не знаю почему. Плюс я использую преобразование из клетки в мат, так что это странно. Что ты об этом думаешь? У вас есть другие предложения?
Спасибо за вашу помощь