簡體   English   中英

如何在MATLAB中找到向量的分段索引?

[英]How to find segment indices of vector in MATLAB?

假設我有一個包含person_ids的向量,如下所示:

x = [1,1,1,2,2,3,3,3,3,4]

所以前3個項目是針對人員1的。我如何找到一個新人員開始的向量索引?

即我的功能應該返回

f(x) = [1,4,6,10];

有沒有為此的MATLAB方法?

假設人員ID已排序,並且ID不能為負,則可以使用

>> x = [1,1,1,2,2,3,3,3,3,4];
>> find(diff([-1 x]))
ans =

    1    4    6   10

Praetorian的答案很不錯,但是如果您需要其他選擇,則可以使用unique的第二個輸出。 第二個輸出確定特定輸入序列的第一個唯一值的位置。

另外,假設人員ID已排序,則只需執行以下操作:

[~,y,~] = unique(x)

y =

 1
 4
 6
10

次要音符

如果您查看版本R2013a之前的unique文檔 ,則該文檔用於查找位置數組中輸入序列的最后一個唯一值。 現在已更改為R2013a的第一個位置...這是我擁有的版本。 因此,如果您具有R2013a之前的MATLAB版本,則需要將'first'標志作為第二個參數添加到unique。 因此:

[~,y,~] = unique(x, 'first');

如果您擁有R2013a或更高版本,則無需擔心這一點...但是,如果您擁有更老的版本,則需要記住。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM