Crie um vetor de índice com base nos valores de início e parada [duplicado]
Esta pergunta já tem uma resposta aqui:
Operador de dois pontos eficiente para vários pontos de partida e chegada 4 respostasCom base em uma matriz que contém várias linhas do início (primeira coluna) e do final (segunda coluna) de um intervalo de índice, eu gostaria de criar um vetor de todo o índice. Por exemplo, seA = [2 4; 8 11 ; 12 16]
, Gostaria de ter o seguinte vetorindex = [2 3 4 8 9 10 11 12 13 14 15 16]
.
Estou procurando a maneira mais rápida de fazer isso. Por enquanto, encontrei apenas duas possibilidades:
1) com um laço
index = [];
for n = 1:size(A, 1)
index = [index A(n, 1):A(n, 2)];
end
2) comarrayfun
index = cell2mat(arrayfun(@(n) A(n, 1):A(n, 2), 1:size(A, 1), 'uni', 0));
Curiosamente,arrayfun
é muito mais rápido que a versão em loop e não sei por que. Além disso, eu uso uma conversão de célula para tapete, o que é estranho. O que você acha disso? Você tem outras sugestões?
Thanx por sua ajuda