我想写一个简单的程序,从文本文件中提取一个评分矩阵。我在一个文件(PAM250.txt)上的代码可以正常工作,但在另一个文件(Blosum62.txt)上却遇到了问题。然而,我的另一个文件(Blosum62.txt)却遇到了问题。
具体来说,当我从文件中导入数据后,我的 scores_list 的数据类型是 'list'。然而当我创建numpy数组时,在PAM250实例中,列表被添加为 "list "类型,但在Blosum62实例中,列表被添加为 "numpy.ndarray "类型。
这两个文件的数据存储方式有点不同,在PAM250中,矩阵的格式是用制表符,而在Blosum62中,数据的格式是用空格。这是否是造成差异的原因?当我打印中间列表时,它们看起来是一样的。所以我想知道为什么在一个实例中,列表是以list的形式添加到数组中,而在另一个实例中则是以numpy.ndarray的形式添加?
我的代码如下。
#Grab scoring matrix from text file
matrix_file = open(r'C:\Users\...\Blosum62.txt')
scores = matrix_file.readlines()
matrix_file.close()
scores_list = []
#delete tabs and white spaces between char in string and turn into lists
for index, row in enumerate(scores):
row = row.split()
scores_list.append(row)
score_matrix = np.asarray(scores_list)
另外,我不知道这是正常的还是奇怪的,但是在工作中的PAM250数组中,list的前面都有 "list "这个词,例如输出。
[list(['.', 'A', 'R', 'N', 'D'...])
list(['A', '2', '-2',...],...]
你的问题是在Blosum62.txt文件的某个地方,每行有多少个空格有一些变化。所以当你调用 row = row.split()
的所有行,而不是所有的行都被附加到你的 scores_list
是一样的。那么NumPy就不能进行二维数组的转换,因为大小不一致。请看下面的例子。
import numpy as np
l1 = [1,2,3]
l2 = [4,5,6,7,8]
arr = np.array([l1, l2])
print (arr) # [list([1, 2, 3]) list([4, 5, 6, 7, 8])]
我的建议是查看你的Blosum62.txt文件 确定你想让score_list包含的内容 然后修改文件以确保格式正确。