+:'numpy.float64'和'str'不支持的操作数类型

时间:2014-04-16 17:01:14

标签: python numpy

我试图从一个输入文件(input.txt)中找到标准差和平均值,该输入文件由一列中的5000个数据组成,我希望输出文件' outfile.txt'。我的代码如下:

import numpy

来自numpy import *

def main():

    outfile = open('outfile.txt','w')
    DataIn = loadtxt('input.txt')
    s = DataIn.std()
    m = DataIn.mean()
    outfile.write(s + '\n')
    outfile.write(m + '\n')
    outfile.close()

main()的

当执行python 2.7.1时,出现以下消息:TypeError:不支持的操作数类型+:' numpy.float64'和' str'

但是,如果在屏幕上打印输出而不是输出文件,则以下代码运行良好:

import numpy
from numpy import *
DataIn = loadtxt('input.txt')
s = DataIn.std()
print s

让我帮忙获取正确的代码。

3 个答案:

答案 0 :(得分:2)

试试这个:

outfile.write(str(s) + '\n')
outfile.write(str(m) + '\n')

答案 1 :(得分:1)

第一种情况失败,因为s + '\n'尝试添加两个不同类型的参数,并且可用于实现此参数的任何函数(numpy.float64.__add__str.__radd__)都知道如何添加numpy.float64str。您必须明确,或者使用

自己调用str
outfile.write(str(s) + '\n')

或使用不同的功能。这样的事情会更好:

outfile.write( "{0}\n".format(s) )

第二种情况成功,因为print语句隐式调用传递给它的每个表达式str),所以它就像你写的那样工作

print str(s)

不涉及加法运算符,因此不需要未定义的隐式转换。

请注意,如果numpy.float64.__add__被定义为

,则第一种情况可行
def __add__(self, x):
    if isinstance(x, str):
        return str(self) + x
    ...

答案 2 :(得分:1)

您希望输出具有特定数量的数字吗?如果是这样,请替换

outfile.write(s + '\n')
outfile.write(m + '\n')

与例如

outfile.write('{:1.4f}\n'.format(s))
outfile.write('{:1.4f}\n'.format(m))

这将为您提供浮点后4位数字。见String formatting examples