使用矩阵作为索引来识别另一个字符的实例 - MATLAB

时间:2015-07-28 10:23:24

标签: matlab

我有三个矩阵指定索引(ind),数据点类型(type - 字符列表)和此数据点(pos)的值。

ind=
1
1
1
1
2
2
2
2
2
3
3

type = 
A
A
B
A
C
B
C
B
A
B
C

pos = 

52150
109583
131411
193221
69719
203747
217250
269560
306121
324084
333170

问题1 :在索引范围内计算每种类型实例的最佳方法是什么?例如索引= 1有3A和1B,以下部分有效,但会切断在不同索引边界发生的任何数据点:

Count(:,1) = accumarray(ind(intersect([strfind(type,'A')],find(~diff(ind)))),1);

问题2 :我如何使用相同的索引来确定特定diff对的数据点之间的type?例如如果我想找到A-A对之间的差异,ind = 1将给出答案109583-52150 = 57433和193221-109583 = 83,638。在ind = 2内,它将没有给出答案,因为该索引中只有1 A.这些总是按矩阵顺序计算 - 一个字母带有它的下一个有效字母。

我有时需要找到不止一对,例如A-B和B-A的距离 - 跳过任何C&#39。

编辑:当混合对即A-B / B-A时,在当前字母和下一个匹配字母之间计算差异 - 按顺序向下矩阵。

对于ind = 1,结果将是:

109583-52150 = 57433 (A2-A1)
131411-109583 = 21,828 (B1-A2)
193221-131411 = 61,810 (A3-B1)

如果存在C且未对其进行搜索,则只会忽略它,并且下一个匹配点的值将用于diff

1 个答案:

答案 0 :(得分:1)

计算您可以使用的出现次数

[v, c] = unique(type(ind==x));

它为type中的每个元素(由ind ofc指定)和c中的每个元素提供了出现次数。 (我在这里得到了问题吗?)

我不明白的第二个问题。如果你有4A和1B的话A-B差异怎么样? 通常,您可以使用& - 运算符来组合不同的引用,例如

pos((ind==1)&(type=='A'))
ans =
       52150
      109583
      193221
diff(pos((ind==1)&(type=='A')))
ans = 
       57433
       83638

如果您需要添加多个type,则只需使用此

添加它们即可
pos((ind==1)&((type=='A')|(type=='B')))
ans =
       52150
      109583
      131411
      193221
diff(pos((ind==1)&((type=='A')|(type=='B'))))
ans =
       57433
       21828
       61810

希望这有帮助