2013-10-29 31 views
1

我有一個從測量文件中提取的序列,序列如下所示。查找遞減序列的起始索引

a = [2 1 3 2 1 0 1 2 3 4 5 4 3 2 3 4 5 4];;

我要找到每個遞減序列的開始索引.... 爲例如:在上述序列中,你可以找到的順序開始在以下指數

1. [3 2 1] this sequence starts decreasing from the index 3, 
2. [5 4 3 2] this sequence starts decreasing from the index 11, 
3. [5 4] this sequence starts decreasing from the index 17. 

任何想法,就減少如何找到這個序列的起點會更加有用...在此先感謝

+0

我試過使用函數,即 差異和findpattern(a,[4 3]).... 當我使用findpattern函數我不得不提及列表中的所有模式組合,並檢查它...它不是一個可行的功能。我想知道在Matlab中是否有其他更簡單的查找序列模式的方法 –

+0

請發佈您的代碼... – Josh

+0

您希望結果爲[3 3 2 1]和[3 2 2] 2 1]'? –

回答

2

如何:

find(diff([0, diff(a) < 0]) == 1) 

換句話說,找到差值爲負的索引位置(diff(a) < 0),然後只選擇在數目增加後出現的索引位置。

+0

Ya我正在尋找的一個....感謝 –

+0

在您之前的程序中,我無法理解最後一行 a = [2 1 3 2 1 0 1 2 3 4 5 4 3 2 3 4 5 4] diff(a) I = find(diff(a )<0) I2 = diff(I) I([true,I2〜= 1]) 請問您是否可以在這一行刪除您的知識I([true,I2〜= 1]).... thks .... –

+0

@BuBuBulji首先寧願使用新版本。 'I([true,I2〜= 1])':所以'I2〜= 1'返回一個邏輯矩陣,表示元素不是1的邏輯矩陣,但它比'I'短一個元素(因爲diff縮短了一個元素),我知道我總是希望包含第一個元素,所以我在開頭添加了一個「true」。 – Dan