我有三个矩阵指定索引(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
。
答案 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
希望这有帮助