ufunc'添加'不包含带有签名匹配类型dtype的循环(' S32')(' S32')(' S32')

时间:2017-01-25 19:16:22

标签: python numpy

我试图运行某人的脚本进行一些模拟,我尝试绘制一些直方图,但是当我这样做时,我总是得到上面提到的错误信息。我不知道出了什么问题。

这是我得到的完整回溯错误:

File "AVAnalyse.py", line 205, in <module> 
  f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3]) 
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')

这是我试图运行的代码:

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
  f = open(name_out,'w')
  f.write('distance  d.probability  efficiency  e.probability')
  for line in dist_hist:
    f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3])
  f.close()


  print "data saved in " +"histogram_"+donor+"_"+acceptor+".dat"

任何有关我出错的帮助/解释都将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:18)

似乎line[0]line[1]line[2]line[3]dist_hist的元素。 dict_histnumpy.ndarraydict_hist的元素具有数字类型(如np.float64)(基于附件中的计算)。您正尝试添加不同类型的元素:np.float64str。如果您想避免使用此TypeError,则可以将line[0]line[1]line[2]line[3]的类型更改为str。

您的代码片段应如下所示:

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability')
for line in dist_hist:
  f.write(str(line[0])+'  '+str(line[1])+'  '+str(line[2])+'  '+str(line[3]))
f.close()

print "data saved in " +"histogram_"+donor+"_"+acceptor+".dat"

编辑:

您应该替换此代码段:

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability')
for line in dist_hist:
  f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3])
f.close()

到这一个:

name_out = "histogram_" + donor + "_" + acceptor + ".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability\n')
for line in dist_hist:
  f.write(str(line[0]) + '  ' + str(line[1]) + '  ' + str(line[2]) + '  ' + str(line[3]) + '\n')
f.close()

在此之前,字符串被写入一行文件。因为你的数据变量指向空数组,因为我们开始从第二行(它是空的)读取。