如何从python中的numpy矩阵中为每个可能的列对检索唯一出现的对字母数的频率

我有一个使用numpy矩阵的矩阵:

>>> print matrix
[['L' 'G' 'T' 'G' 'A' 'P' 'V' 'I']
 ['A' 'A' 'S' 'G' 'P' 'S' 'S' 'G']
 ['A' 'A' 'S' 'G' 'P' 'S' 'S' 'G']
 ['G' 'L' 'T' 'G' 'A' 'P' 'V' 'I']]

我想要的是对于每个可能的列对,检索每对列中每行的每对字母的唯一出现次数的频率.

例如,对于第一对列,即:

[['L' 'G']
 ['A' 'A']
 ['A' 'A']
 ['G' 'L']]

我想检索列中每对字母的频率(注意:字母的顺序很重要)

Frequency of [‘L’ ‘G’] = 1/4

Frequency of [‘A’ ‘A’] = 2/4

Frequency of [‘G’ ‘L’] = 1/4

一旦计算出第一对列的这些频率,则对每个其他可能的列对组合执行相同的操作.

我认为某种itertools会有助于解决这个问题,但我不知道如何……任何帮助都会非常感激

解决方法:

我使用itertools.combinations和collections.Counter:

for i, j in itertools.combinations(range(len(s.T)), 2):
    c = s[:, [i,j]]
    counts = collections.Counter(map(tuple,c))
    print 'columns {} and {}'.format(i,j)
    for k in sorted(counts):
        print 'Frequency of {} = {}/{}'.format(k, counts[k], len(c))
    print

产生

columns 0 and 1
Frequency of ('A', 'A') = 2/4
Frequency of ('G', 'L') = 1/4
Frequency of ('L', 'G') = 1/4

columns 0 and 2
Frequency of ('A', 'S') = 2/4
Frequency of ('G', 'T') = 1/4
Frequency of ('L', 'T') = 1/4

[...]

(如果你想要两个订单,修改它来做两个列0 1和1 0是微不足道的,并且我假设每个可能的列对你不是指“每个相邻的列对”).

上一篇:Spring源码浅析之bean实例的创建过程(二)


下一篇:杀死Spring - BeanFactory系列中的DefaultListableBeanFactory