You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fast.ai图像分类调用np.vectorize报0输入未设otypes错误如何解决

报错根因

该错误是numpy的vectorize方法的限制:当输入数组长度为0时,numpy无法自动推断输出数据类型,必须显式指定otypes参数才能正常执行。而触发该错误的前置条件是CustomImageItemList.from_folder执行后没有读取到任何符合条件的jpg图片,导致self.items是空数组,进而在调用向量化方法时报错。

解决方案
  • 第一步:排查图片读取问题
    先确认你定义的path变量指向的目录正确,目录下确实存在后缀为.jpg的图片。如果你的图片后缀有大写.JPG格式,需要修改extensions参数匹配大小写:

    CustomImageItemList.from_folder(path, extensions=['.jpg', '.JPG'])
    

    可以先打印读取到的图片数量验证:

    img_list = CustomImageItemList.from_folder(path, extensions='.jpg')
    print(f"读取到的图片总数:{len(img_list)}")
    

    如果输出为0,说明路径配置或者文件后缀匹配有误,先修正该问题再执行后续逻辑。

  • 第二步:兼容空输入的代码修改
    如果你需要兼容空输入的场景,避免直接抛出报错,可以选择以下两种修改方式二选一:

    1. 给np.vectorize显式指定otypes参数
      把原代码中的file_names=np.vectorize(lambda files: str(files).split('/')[-1][:-4])修改为:
      file_names = np.vectorize(lambda files: str(files).split('/')[-1][:-4], otypes=[str])
      
    2. 替换numpy向量化写法,改用原生Python列表推导(更推荐,可读性和兼容性更高)
      原custom_label方法可以改写为:
      def custom_label(self,df, **kwargs)->'LabelList':
          """Custom Labels from path"""
          file_names = [str(f).split('/')[-1][:-4] for f in self.items]
          labels = [df.loc[x,'lesion'] for x in file_names]
          y = CategoryList(items=labels)
          res = self._label_list(x=self,y=y)
          return res
      

内容的提问来源于stack exchange,提问作者Vinayak Anil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:04