2013-10-29 26 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