我有这样的文件(txt或fasta)。每个序列只位于一行中。
>Line1
ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC
>Line2
ATTGCGCTANANAGCTANANCGATAGANCACGAAAGAGATAGACTATAGC
>Line3
ATCGCGCTANANAGCTANANGGCTAGANCNCGAAAGNGATAGACTATAGC
>Line4
ATTGCGCTANANAGCTANANGGATAGANCACGAGAGAGATAGACTATAGC
>Line5
ATTGCGCTANANAGCTANANCGATAGANCACGATNGAGATAGACTATAGC
我必须得到一个矩阵,其中每个位置对应于序列的每个字母(核苷酸)。在这种情况下,矩阵为(5x50)。 我一直在处理numpy方法。我希望有人可以帮助我。
答案 0 :(得分:1)
如果您正在使用python中的DNA序列数据,我建议您使用Biopython库。您可以使用pip install biopython
进行安装。
以下是如何达到预期效果的方法:
from Bio import SeqIO
import os
import numpy as np
pathToFile = os.path.join("C:\\","Users","Kevin","Desktop","test.fasta") #windows machine
allSeqs = []
for seq_record in SeqIO.parse(pathToFile, """fasta"""):
allSeqs.append(seq_record.seq)
seqMat = np.array(allSeqs)
但是在for循环中,每个seq_record.seq
都是Seq
对象,让您可以灵活地对它们执行操作。
In [5]: seqMat.shape
Out[5]: (5L, 50L)
您可以根据需要对seqMat
数组进行切片。
In [6]: seqMat[0]
Out[6]: array(['A', 'T', 'C', 'G', 'C', 'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A',
'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A', 'G', 'C', 'T', 'A', 'G',
'A', 'N', 'C', 'A', 'C', 'G', 'A', 'T', 'A', 'G', 'A', 'G', 'A',
'G', 'A', 'G', 'A', 'C', 'T', 'A', 'T', 'A', 'G', 'C'],
dtype='|S1')
强烈建议您查看教程!
答案 1 :(得分:0)
我希望这一小段代码有所帮助。您基本上需要将字符串拆分为字符数组。之后,您只需将所有内容放入矩阵中即可。
Line1 = "ATGC"
Line2 = "GCTA"
Matr1 = np.matrix([n for n in Line1], [n for n in Line2])
Matr1[0,0]
将返回矩阵中的第一个元素。
答案 2 :(得分:0)
实现矩阵的一种方法是读取文件的内容并将其转换为列表,其中列表的每个元素是每行中存在的序列。然后,您可以将矩阵作为2D数据结构访问。 例如:[ATCGCGANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGATANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGATANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGTANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC]
filePath = "file path containing the sequence"
将序列存储为矩阵的列表
listFasta =list ((open(filePath).read()).split("\n"))
for seq in listFasta:
for charac in seq:
print charac
访问矩阵的每个元素的另一种方法
for seq in range(len(listFasta)):
for ch in range(len(listFasta[seq])):
print listFasta[seq][ch]