numpy.loadtxt“无法将字符串转换为浮点数”
我正在检查here中的代码。numpy.loadtxt“无法将字符串转换为浮点数”
运行代码时,我得到:
[[email protected]]$ python Needleman-Wunsch.py
Traceback (most recent call last):
File "Needleman-Wunsch.py", line 92, in <module>
(alignedSeq1, alignedSeq2) = computeFMatrix(seq1, seq2, -6)
File "Needleman-Wunsch.py", line 34, in computeFMatrix
similarityMatrixMap = readBLOSUM50("BLOSUM50.txt")
File "Needleman-Wunsch.py", line 16, in readBLOSUM50
similarityMatrix = np.loadtxt(fileName, delimiter='\t')
File "/usr/local/lib/python2.7/site-packages/numpy/lib/npyio.py", line 827, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: A R N D C Q E G H I L K M F P S T W Y V
再现这个小例子是:
import numpy
numpy.loadtxt("data.txt", delimiter='\t')
与data.txt
之中:
A R N D C Q
A 5 -2 -1 -2 -1 -1
R -2 7 -1 -2 -4 1
N -1 -1 7 2 -2 0
您也可以the original BLOSUM50.txt
file和完整的代码是从the link above。
删除BLOSUM50.txt
的第一行给出了相同的错误。
您只需更换loadtxt
与
numpy.genfromtxt("data.txt", delimiter='\t', skip_header=True)[:, 1:]
这跳过头,转换列名nan
,然后扒了他们。
问题是您正在读取文件中的非数字值。 您需要指定要使用的列和你想跳过行:
similarityMatrix = np.loadtxt('blosum50.txt', skiprows=1, delimiter='\t', usecols=range(1,num_cols+1))
这与你之前发布的代码为我工作。 :D
感谢您的评论,但变量'num_cols'未定义。它应该是数据文件中的列数,即20?但是,当我将它更改为20时,它会得到IndexError。 – Karyo 2014-10-07 00:03:48
它应该是21,因为第二个参数是排他性的。 – 2014-10-07 00:52:01
其实对于你以前的代码,被替换的行类似 similarityMatrix = np.loadtxt(fileName,delimiter ='\ t',skiprows = 1,usecols = range(1,len(t)+1)) – 2014-10-07 00:56:36
我从根本上简化了你的问题。如果我做错了,请随时向我大喊。 (最糟糕的是有一个“恢复”按钮。)这使得你的问题*更*更简单地说,但是,所以它可能是最好的你保持更改恕我直言。 – Veedrac 2014-10-06 08:55:02
你从哪里得到原始的'BLOSUM50'文件?这不是代码所期望的。 – Veedrac 2014-10-06 08:59:18