我有一个像这样使用 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.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 列是微不足道的,而且我假设每对可能的列都不是“每对相邻的列”)。
关于python - 如何从python中的numpy矩阵中检索每对可能的列对字母的唯一出现次数的频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15187355/