実現したいこと
引用して、既に動作するコードがあるのですが、内容を理解したい
前提
遺伝子情報の解析では配列のアラインメントにより相同性を判断しています。
このコードは以下のサイトで得られたものなのですが、生物学的な理解はあってもプログラミング的な理解が追いつきません。
どなたかコードの中身を解説いただけませんか。
発生している問題・エラーメッセージ
エラーメッセージはありません。
該当のソースコード
import numpy as np def get_score(i,j,x,y): global H if i<=0 or j<=0: if i==0 and j==0: H[i,j] = 0 elif i>0 and j==0: H[i,j] = get_score(i-1,j,x,y)-2 elif i==0 and j>0: H[i,j] = get_score(i,j-1,x,y)-2 return H[i,j] else: if H[i,j] >-1000: return H[i,j] else: if x[i-1]==y[j-1]: score=+1 else: score=-1 H[i,j] = max([ get_score(i-1,j-1,x,y)+score, get_score(i-1,j,x,y)-2, get_score(i,j-1,x,y)-2 ]) return H[i,j] X = 'GGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGC' Y = 'ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTC' N = len(X) M = len(Y) H = np.full((N+1,M+1), -1000, dtype='int16') print('SCORE=',get_score(N,M,X,Y))
試したこと
内容を理解しようとしたができなかった
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「以下のサイト」の記載がありませんが、以下の URL でしょうか?
情報基礎「Pythonプログラミング」(ステップ8・塩基配列のアラインメント)
https://wagtail.cds.tohoku.ac.jp/coda/python/p-8-function-part2-sup-seq-alignment.html
https://wagtail.cds.tohoku.ac.jp/coda/python/p-8-function-part2-sup-seq-alignment.html
↑ここに書いてある数学的な計算の意味は全て正しく理解しているけど、
プログラムに書かれているifとかelseとかlenとか再帰呼び出しの意味がわからない、
という質問内容ですか?
サイトのURLの記載がなく、失礼いたしました。
ご推察の通りで、サイトのURLも質問の意図(再帰呼び出しがわからない)もあっています。
可能であればご回答お願いいたします。
