我有一个像这样使用 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']]
我想检索列中每对字母的频率(注意:字母的顺序很重要)

一旦计算出第一对列的这些频率,然后对所有其他可能的列组合执行相同的操作。
我认为某种 itertools 将有助于解决这个问题,但我不知道如何...任何帮助将不胜感激

最佳答案

我会使用 itertools.combinationscollections.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 列是微不足道的,而且我假设每对可能的列都不是“每对相邻的列”)。

关于python - 如何从python中的numpy矩阵中检索每对可能的列对字母的唯一出现次数的频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15187355/

10-09 17:08