繁体   English   中英

Python、Numpy 数组值添加为 ndarray 而不是列表

[英]Python, Numpy array values added as ndarray instead of list

我正在尝试编写程序的一个简单部分,该程序从文本文件中提取评分矩阵。 我的代码可以在一个文件 (PAM250.txt) 上正常工作。 但是,对于我的其他文件(Blosum62.txt),我遇到了问题。

具体来说,在我从文件中导入数据后,我的 scores_list 的数据类型是“列表”。 然而,当我创建 numpy 数组时,在 PAM250 实例中,列表被添加为“列表”类型,但在 Blosum62 实例中,列表被添加为“numpy.ndarray”类型。

两个文件之间的数据存储方式略有不同,在 PAM250 中,矩阵用制表符格式化,而在 Blosum62 中,数据用空格格式化。 这会造成差异吗? 当我打印中间人列表时,它们在我看来是一样的。 所以我想知道为什么在一个实例中将列表作为列表添加到数组中,而在另一个实例中作为 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”开头,例如 output:

[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 包含的内容,然后修复文件以确保格式正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM