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

技术问题:无法获取ndarray的shape及如何查找指定数据中的数组数量

问题1:无法获取ndarray的shape,该如何解决?

遇到拿不到ndarray的shape的情况,你可以按这几个步骤排查解决:

  • 先确认你的变量真的是numpy ndarray。很多时候我们会把嵌套的元组、列表或者其他容器当成ndarray,比如你第二个问题里的就是元组包裹着数组。用type()函数检查:

    import numpy as np
    # 假设你的变量叫data
    print(type(data))
    

    如果输出是tuple或者list,那你需要先取出里面的ndarray元素再访问shape,比如data[0].shape。

  • 如果确实是ndarray,但还是拿不到shape,大概率是你的数组是object dtype。这种数组里的元素可能是不同长度的子数组或者其他对象,直接访问data.shape只能拿到外层的形状,要查看内部元素的shape得遍历:

    # 遍历object数组的每个元素看shape
    for elem in data:
        if isinstance(elem, np.ndarray):
            print(elem.shape)
    
  • 如果报错提示'xxx' object has no attribute 'shape',那肯定是变量不是ndarray,回到第一步排查结构,是不是嵌套了其他容器,或者数据加载时出了问题导致没生成ndarray。


问题2:如何查找以下数据中的数组数量?

先纠正一个小误解——你给出的这个数据(array([], shape=(1, 0), dtype=float64), array([[814.0257732 , 718.76804124], ...]))本质是一个Python元组,不是void类型(可能是你看打印信息的时候看错了)。要统计里面的数组数量,方法很直接:

  • 先确认数据类型,用type()验证:
    print(type(your_data))  # 应该输出 <class 'tuple'>
    
  • 直接用len()函数获取元组里的元素数量,也就是数组的个数:
    array_count = len(your_data)
    print(array_count)  # 这里会输出2
    

如果真的遇到void dtype的结构化数组(比如np.dtype('V')),那你需要先解析结构化数组的字段,但从你给出的输出来看,明显是元组,上面的方法就完全够用了。


内容的提问来源于stack exchange,提问作者Ishaan Kalsi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:01:04