Skip to content
Advertisement

ufunc ‘add’ did not contain loop with signature matching type dtype (‘S32’) (‘S32’) (‘S32’)

I’m trying to run someone’s script for some simulations I’ve made to try plotting some histograms, but when I do I always get the error message mentioned above. I have no idea what’s gone wrong.

Here’s the complete traceback error I get:

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')

This is the code I am trying to run:

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"

What am I doing wrong?

Advertisement

Answer

It seems like line[0], line[1], line[2], line[3] are elements of dist_hist. dict_hist is a numpy.ndarray. The elements of dict_hist has a numeric type (like np.float64) (based on calculations from your attached file). You’re trying to add elements of different types: np.float64 and str. If you want to avoid this TypeError, you can change type of line[0], line[1], line[2], line[3] to str.

Your snippet of code should be like this:

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"

EDIT:

You should replace this snippet of code:

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()

to this one:

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

Before that, strings were written to file in one line. Because of that your data variable point to empty array since we start to read from 2nd line (which was empty).

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement