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的第一行给出了相同的错误。

+0

我从根本上简化了你的问题。如果我做错了,请随时向我大喊。 (最糟糕的是有一个“恢复”按钮。)这使得你的问题*更*更简单地说,但是,所以它可能是最好的你保持更改恕我直言。 – Veedrac 2014-10-06 08:55:02

+0

你从哪里得到原始的'BLOSUM50'文件?这不是代码所期望的。 – Veedrac 2014-10-06 08:59:18

您只需更换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

+0

感谢您的评论,但变量'num_cols'未定义。它应该是数据文件中的列数,即20?但是,当我将它更改为20时,它会得到IndexError。 – Karyo 2014-10-07 00:03:48

+0

它应该是21,因为第二个参数是排他性的。 – 2014-10-07 00:52:01

+0

其实对于你以前的代码,被替换的行类似 similarityMatrix = np.loadtxt(fileName,delimiter ='\ t',skiprows = 1,usecols = range(1,len(t)+1)) – 2014-10-07 00:56:36