Python, Numpy数组值添加为ndarray而不是list。

问题描述 投票:0回答:1

我想写一个简单的程序,从文本文件中提取一个评分矩阵。我在一个文件(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',...],...]
python arrays list numpy numpy-ndarray
1个回答
0
投票

你的问题是在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包含的内容 然后修改文件以确保格式正确。

© www.soinside.com 2019 - 2024. All rights reserved.