簡體   English   中英

Python-使用Numpy,ValueError生成隨機dna序列

[英]Python - Generating random dna sequences with Numpy, ValueError

我想問兩個熟悉numpy的人。 我見過非常相似的問題(和答案),但是沒有一個我想使用numpy,因為它提供了很多其他選項,將來我可能希望在該代碼中使用。 我試圖在python中使用“隨機”生成隨機核苷酸序列的列表。 因為我想擁有非均勻概率,所以我決定改用numpy。 但是,我收到錯誤消息:“ ValueError:必須是一維或整數”。

import numpy as np

def random_dna_sequence(length):
    return ''.join(np.random.choice('ACTG') for _ in range(length))

with open('dna.txt', 'w+') as txtout:
    for _ in range(10):
        dna = random_dna_sequence(100)
        txtout.write(dna)
        txtout.write("\n")

        print (dna)

我是一個徹底的磨砂膏,我不知道多維在哪里或如何發揮作用。 我懷疑是“ .join()”,但我不確定,也不確定如何替換它。 我的另一個問題是如何獲得非均勻概率。 我嘗試使用“ np.random.choice('ACTG',p = 0.2,0.2,0.3,0.3)”,但是它不起作用。

我希望那里有人可以提供幫助。 提前致謝。

伯特,問候

對於問題的第一部分,將a作為列表傳遞:

def random_dna_sequence(length):
    return ''.join(np.random.choice(list('ACTG')) for _ in range(length))

或將基礎定義為列表或元組:

BASES = ('A', 'C', 'T', 'G')

def random_dna_sequence(length):
    return ''.join(np.random.choice(BASES) for _ in range(length))

第二部分有一個類似的解決方案:將概率作為列表或元組傳遞:

BASES = ('A', 'C', 'T', 'G')
P = (0.2, 0.2, 0.3, 0.3)

def random_dna_sequence(length):
    return ''.join(np.random.choice(BASES, p=P) for _ in range(length))

就random_dna_sequence函數而言,我得到了與mhawke類似的解決方案。 但是,我生成的序列與人類基因組的1號染色體一樣長,用我的方法花了將近一分鍾,因此我嘗試了mhawke的方法來查看我是否有速度提升。 相反,它花費了大約十倍的時間。 因此,對於處理大序列的任何人,我建議對return語句進行以下更改:

BASES = ('A', 'C', 'G', 'T')
def random_dna_sequence(length):
    return ''.join(np.random.choice(BASES, length))

基本上,這可以讓numpy執行循環,從而可以更有效地執行循環。 我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM