关于使用矩阵作为索引来识别另一个中的字符实例:使用矩阵作为索引来识别另一个中的字符实例 – MATLAB

 2022-02-13 

Using a matrix as a index to identify instances of characters in another - MATLAB

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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。以下部分有效,但会切断出现在不同索引边界的任何数据点:

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

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

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

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

对于 ind = 1,结果将是:

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

如果存在 C 并且没有搜索它,它将被简单地忽略,并将下一个匹配点的值用于 diff


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

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

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

第二个问题我不明白。如果您有 4A\\'s 和 1B\\'s,A-B 差异会是什么样子?
通常,您可以使用 &-Operator 来组合不同的限制,例如

1
2
3
4
5
6
7
8
9
pos((ind==1)&(type=='A'))
ans =
       52150
      109583
      193221
diff(pos((ind==1)&(type=='A')))
ans =
       57433
       83638

如果您需要添加多个 type\\'s,您可以使用 this

简单地添加它们

1
2
3
4
5
6
7
8
9
10
11
pos((ind==1)&((type=='A')|(type=='B')))
ans =
       52150
      109583
      131411
      193221
diff(pos((ind==1)&((type=='A')|(type=='B'))))
ans =
       57433
       21828
       61810

希望对你有帮助