添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
酒量大的仙人掌  ·  Bindable properties - ...·  7 月前    · 
空虚的毛豆  ·  LineDisplayCapabilitie ...·  1 年前    · 

"func 'subtract' 没有包含一个签名与类型相匹配的循环(dtype('S21'), dtype('S21'))。-> dtype('S21')" 与字节

1 人关注

这个问题似乎是一个重复的问题。 Python: ufunc 'add' 没有包含一个签名匹配类型的循环 dtype('S21') dtype('S21') dtype('S21') , but the solution presented there isn't working.

我目前正在进行的工作是 https://github.com/executable16/audio-fingerprint-identifying-python 因此,我避免在这里粘贴所有的代码。我得到的主要是一个错误。

Traceback (most recent call last):
  File "recognize-from-microphone.py", line 139, in <module>
    matches.extend(find_matches(channel))
  File "recognize-from-microphone.py", line 132, in return_matches
    yield (sid, offset - mapper[hash])
numpy.core._exceptions.UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('S21'), dtype('S21')) -> dtype('S21')

在我看来,这种例外情况实际上很少能说明这里的实际问题是什么。我试过SO的其他解决方案,但它们似乎并不奏效。

准确的错误路线是。yield (sid, offset - mapper[hash])

The types of sid, offset and mapper[hash] are <class 'int'>, <class 'bytes'>, and <class 'numpy.int64'>, respectively.

对这个问题的任何修复,加上适当的解释,将是非常有帮助的。

1 个评论
根据错误信息,减法中的变量都是 S21 dtype的数组,即字节串。
python
python-3.x
numpy
ATUL MALAKAR
ATUL MALAKAR
发布于 2020-04-20
1 个回答
hpaulj
hpaulj
发布于 2020-04-21
已采纳
0 人赞同

我可以用以下方法重现你的错误。

In [144]: type(b'123')                                                                                 
Out[144]: bytes
In [145]: type(np.int64(3))                                                                            
Out[145]: numpy.int64
In [146]: b'123'-np.int64(3)                                                                           
---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
<ipython-input-146-bd8d8c3ec2cd> in <module>
----> 1 b'123'-np.int64(3)
UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('S21'), dtype('S21')) -> dtype('S21')

替换代码1】变量采取了 "控制",并将bytes转换为数组,bytestring的dtype为普通dtype。

如果mapper[hash]产生一个Python数字,而不是,我们会得到一个错误,比如。

In [147]: b'123'-3                                                                                     
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-147-04d1219bd464> in <module>
----> 1 b'123'-3
TypeError: unsupported operand type(s) for -: 'bytes' and 'int'

一个bytes对象不支持减法。 只有*和+。

In [149]: b'123'*3                                                                                     
Out[149]: b'123123123'