質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

522閲覧

モデルコードが理解できない

s_kj

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/04/27 08:08

実現したいこと

引用して、既に動作するコードがあるのですが、内容を理解したい

前提

遺伝子情報の解析では配列のアラインメントにより相同性を判断しています。
このコードは以下のサイトで得られたものなのですが、生物学的な理解はあってもプログラミング的な理解が追いつきません。
どなたかコードの中身を解説いただけませんか。

発生している問題・エラーメッセージ

エラーメッセージはありません。

該当のソースコード

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_kj

2023/04/27 08:56

サイトのURLの記載がなく、失礼いたしました。 ご推察の通りで、サイトのURLも質問の意図(再帰呼び出しがわからない)もあっています。 可能であればご回答お願いいたします。
guest

回答1

0

ChatGPTの回答

動作のおおまかな説明

この関数は、二つの配列XとYのアラインメントに基づいて、相同性スコアを計算します。配列XとYの各要素は、遺伝子情報である文字列です。関数は、再帰的に各配列の要素を比較し、最適なアラインメントを見つけるためにスコアを最大化します。関数は、再帰呼び出しを使用して、アラインメントを求めるために、各ステップで最適なスコアを計算します。

利用しているアルゴリズムは何か?

この関数は、動的計画法アルゴリズムの一種である、 Needleman-Wunschアルゴリズムを利用しています。 このアルゴリズムは、配列アラインメントにおいて最適なスコアを求めるために、再帰的にアラインメントを求めます。

この関数の結果値である相同性とは何か?

この関数の結果値は、配列XとYのアラインメントによって求められた相同性スコアです。スコアは、配列XとYがアラインされた時の、一致する文字と不一致の文字の数を表しています。スコアが高いほど、配列XとYの相同性が高いことを示しています。関数は、再帰呼び出しを使用して、配列XとYのアラインメントを求め、そのアラインメントに対応するスコアを返します。

とのことなのでNeedleman–Wunschで検索してみると以下が引っかかりました。
グローバルアライメントを求める Needleman–Wunsch アルゴリズム
わたしは元々のコードの意味や「相同性」など理解できていませんが、なんとなく合っていそうな気がします。

投稿2023/04/27 08:38

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_kj

2023/04/27 08:53

ありがとうございます。グッドを送らせていただきました。コードの中身も再帰的に書かれている気がするので、再帰的な書き方をもう少し調べてみます。
can110

2023/04/27 09:03

元サイトにちゃんとNeedleman–Wunsch アルゴリズムも書いてますね。 でもNeedleman–Wunschだと再帰を使わないようなので ChatGPTの答えは厳密には間違っていますね。 動的計画法を使っているという点はあっていると思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問