我有一个使用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是微不足道的,并且我假设每个可能的列对你不是指“每个相邻的列对”).