python scipy ndimage.label() 函数中出现“未找到匹配的签名”错误,用于布尔数组

"No matching signature found" error in python scipy ndimage.label() function used with boolean array

提问人:claradenken 提问时间:11/9/2023 最后编辑:claradenken 更新时间:11/9/2023 访问量:30

问:

我有一个布尔数组来指示干燥的日子:

dry_bool

0        False
1        False
2        False
3        False
4        False
...  
15336    False
15337    False
15338    False
15339    False
15340    False
Name: budget, Length: 15341, dtype: object

False 和 True 值的数目为:

dry_bool.value_counts()

False    14594
True       747
Name: budget, dtype: int64

我想找到连续的干旱天数(其中 dry_bool=True)。 通过 scipy 包使用 ndimage.label() 函数

import scipy.ndimage as ndimage

events, n_events = ndimage.label(dry_bool)

给我以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[76], line 2
      1 # Find contiguous regions of dry_bool = True
----> 2 events, n_events = ndimage.label(dry_bool)

File ~/opt/anaconda3/lib/python3.9/site-packages/scipy/ndimage/_measurements.py:219, in label(input, structure, output)
    216         return output, maxlabel
    218 try:
--> 219     max_label = _ni_label._label(input, structure, output)
    220 except _ni_label.NeedMoreBits as e:
    221     # Make another attempt with enough bits, then try to cast to the
    222     # new type.
    223     tmp_output = np.empty(input.shape, np.intp if need_64bits else np.int32)

File _ni_label.pyx:202, in _ni_label._label()

File _ni_label.pyx:239, in _ni_label._label()

File _ni_label.pyx:95, in _ni_label.__pyx_fused_cpdef()

TypeError: No matching signature found

我无法缠绕我的头。有什么线索吗?

肯定有连续的干旱日,正如我在dry_bool数组中读取 True 值的索引时所看到的:

dry_idcs = [i for i, x in enumerate(dry_bool) if x]
print(dry_idcs[0:10])

[165, 205, 206, 214, 229, 230, 262, 281, 292, 301]

python 数组 scipy 布尔值 ndimage

评论

1赞 andreaslaber 11/9/2023
请提供触发此错误的代码的最小可行部分。
0赞 claradenken 11/9/2023
对不起,我忘记了最重要的代码行,我还是在这里写问题的新手!...我用缺失的代码编辑了问题。

答:

1赞 Ada 11/9/2023 #1

在你的第一个代码片段中,它说 ,即使它应该是一个数据类型为布尔值(不是对象)的数组。鉴于您的错误消息给了您一个 ,也许这就是问题所在?dtype: objectTypeError

您可以尝试显式转换数组的数据类型:

dry_bool = dry_bool.astype(bool)

如果您提供更多代码(例如,如何创建/填充数组),则更容易弄清楚问题到底是什么。dry_bool

评论

1赞 claradenken 11/9/2023
非常感谢!这解决了问题。对不起,我忘记了一些重要的代码行,我用一些缺失的代码片段编辑了问题。我还是第一次在这里提问,边做边学!由于您的回答解决了问题,因此我现在不会详细介绍我如何填充数组。