【问题标题】:ufunc 'add' did not contain loop with signature matching type dtype ('S32') ('S32') ('S32')ufunc'add'不包含签名匹配类型dtype('S32')('S32')('S32')的循环
【发布时间】:2022-02-08 07:15:37
【问题描述】:

我正在尝试为某些模拟运行某人的脚本,以尝试绘制一些直方图,但是当我这样做时,我总是会收到上述错误消息。我不知道出了什么问题。

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

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"

我做错了什么?

【问题讨论】:

  • 向我们展示shapedtypelinedist_hist。我怀疑line[0] 是一个具有'S32' dtype 的数组,而不仅仅是这样一个数组的字符串元素。
  • @hpaulj dist_hist = zeroes((bins,4)) 并且在脚本中又出现了 5 次,但我不确定这意味着什么,除了原始问题 dist_hist[index_ef,3] += hist_add @ 987654330@dist_hist[:,0] = arange(mini,maxi,(maxi-mini)/(float(bins)-0.5))dist_hist[:,2] = arange(mine,maxe,(maxe-mine)/(float(bins)-0.5))——
  • 显示print(line)
  • 上述脚本之前的print(line)print "average distance between dyes is ", average_distance/(len(data[::step])*len(datd[::step])),而打印的下一行在问题中。如果我误会了,我很抱歉,感谢您提供帮助!
  • 我想看看line 在没有字符串格式问题的情况下是什么样子。

标签: python numpy


【解决方案1】:

似乎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。

你的sn-p代码应该是这样的:

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"

编辑:

你应该替换这个sn-p的代码:

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

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

【讨论】:

    【解决方案2】:

    @Eduard Ilyasov 的解决方案解决了我的问题。 TLDR 是在str(thing) 中包含错误来源的部分(为我打印时)。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2023-04-03
    • 2021-11-23
    • 2016-08-06
    相关资源
    最近更新 更多