2011-11-13 24 views
0

に配置することができる結果を得た私はリストに変換したPythonで二つの文字列があります2つの文字列の値を比較した後、アレイ

Seq1 = [x1,x2,x3,x4] 

Seq2 = [y1,y2,y3,y4] 

文字列が同じ長さとで構成されているが文字は'a','c','g'および'u'のみです。

は、その後、私は空の行列len(Seq2)によってlen(Seq1)作成:

a = numpy.zeros(shape=len(Seq1),len(Seq2)) 

次へ]を、私は、リストの値を比較し、そうでない場合の値が一致して0場合1を配置します。値は、関連する配列要素に すなわち

if seq1[0] == seq[0]: 
    a[0,0] = [1] 
else: 
    a[0,0] = [0] 

# repeat for all the values. 
print a 

を配置しなければならない私が働いていたループを有していたが、それは最初の行と列に充填されました。私はそれがSeq1[i] == Seq2[j]のような範囲機能の問題であることがわかりますが、私はそれを理解できません。

+0

こんにちは、マシュー。投稿を編集して試したことのあるコード(つまり、最後に参照していないループ)を含めるように投稿を編集し、それに基づいて質問をするのが最も建設的です。 –

答えて

0

コンパクトな方法は次のとおりです。

import itertools 

for i1,i2 in itertools.product(xrange(len(Seq1)), xrange(len(Seq2))): 
    a[i1,i2] = Seq1[i1] == Seq2[i2] 
0

私はこれが生物情報学の質問であると仮定します。しかし、私の目的は不明です。私はあなたが使用できる汎用マッチングシステムをリストアップしました。

>>> for s1 in xrange(len(seq1)): 
...  for s2 in xrange(len(seq2)): 
...    if seq1[s1]==seq2[s2]: 
...      a[s1,s2]=1 
...    else: 
...      a[s1,s2]=0 
1

両方のリストを反復処理して比較:ループを記述するために

for x in range(len(Seq1)): 
    for y in range(len(Seq2)): 
    a[x, y] = (Seq1[x] == Seq2[y]) 
+0

これは素晴らしいですよ、どうもありがとう!私はそれが単純だったことを知っていた私はちょうどそれの周りに私の頭を得ることができなかった:) –

+0

あなたは本当にリストにそれらを変換する必要はありませんでした。まったく同じコードが文字列でも機能します。 – cvoinescu

0

私は全くネストされたループを使用していないだろう。 numpyの外側のメソッドはあなたのためにそれを行うことができます:

Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy 
>>> seq1 = "acgu" 
>>> seq2 = "aagg" 
>>> numpy.equal.outer(map(ord, seq1), map(ord, seq2)) 
array([[ True, True, False, False], 
     [False, False, False, False], 
     [False, False, True, True], 
     [False, False, False, False]], dtype=bool) 
関連する問題