2014-12-09 3 views
0

Как вы находите все пары последовательных чисел в массиве с MATLAB? Например:Найти все пары последовательных чисел в массиве

A = [1 2 3 4]; 
B = desiredFunction(A) % B = [1 2;2 3;3 4] 

Очевидно, что я мог бы перебрать массив с помощью for, но я предположил бы, что есть более изящный способ сделать это. Может быть, даже какой-то вариант изменения.

О, А в моем сценарии всегда будет сортироваться, но не обязательно заполнять все (diff (A) == 1). Если сортировка A помогает, два решения будут приветствоваться (один для всегда отсортированного A и одного общего решения).

Спасибо!

ответ

0

Вы можете использовать

B = [A(1:end-1)',A(2:end)']; 
+0

правда, очень легко. Должен был подумать об этом :) – user1809923

1

Я интерпретирую вы имеете в виду последовательных позиций, и вы хотите пары без повторений.

unique делает это легко:

B = unique([A(1:end-1).' A(2:end).'], 'rows'); 

Вы также можете использовать sparse, который даст вам несколько раз каждая пара происходит:

>> A = [1 2 3 4 3 4]; %// note: [3 4] appears twice 
>> sparse(A(1:end-1), A(2:end), 1) 
ans = 
    (1,2)  1 
    (2,3)  1 
    (4,3)  1 
    (3,4)  2 
+0

Я не уверен, как интерпретировать «conescutive numbers» в вопросе, но я думаю, вы должны добавить 'idx = find (diff (A) == 1); result = B (idx, :) '. – jolo

+0

Я интерпретирую «последовательные _позиции_», а не «последовательные _values_» –

+0

Да, я заметил. Почему вы используете 'unique'? – jolo

Смежные вопросы