在matlab中我有矩阵:
x = [1 2 3 4 5 6 7 8 9 10;
1 4 5 7 2 1 5 0 2 6;
1 1 1 2 2 3 3 3 4 5]
我想在第3行中找到包含1,2,3,4,5的起始和结束单元格
例如ones=1:3
,twos=4:5', 'threes=5:8', 'fours=9:9
和fives=10:10
。有没有办法找到这个?
答案 0 :(得分:1)
您还可以使用unique
记录第一个/最后一个匹配项的索引来节省一些字节和处理时间:
[C,ia,~] = unique(x(3,:),'first')
C =
1 2 3 4 5
ia =
1 4 6 9 10
ia为您提供了起始索引。
[C,ib,~] = unique(x(3,:),'last')
C =
1 2 3 4 5
ib =
3 5 8 9 10
和ib给你结束索引。
C为您提供了向量中的唯一数字,将这些数字合并在一起,您几乎就像一张表:
[C;ia;ib]
>> ans =
1 2 3 4 5
1 4 6 9 10
3 5 8 9 10
所以它读取的是1:3,twos = 4:5,三分......
答案 1 :(得分:0)
让我们假设你的第3栏A = x{i}(3,:)
A = [1 1 1 2 2 3 3 3 4 5]
你可以简单地使用
[unique(A);find(diff([0 A]));find(diff([A 0]))]
ans =
1 2 3 4 5
1 4 6 9 10
3 5 8 9 10
它将为您提供第二和第三行中每个索引的起点和终点