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

使用Numpy nditer遍历二维对象数组遇属性错误,如何解决?

解决NumPy对象数组遍历访问对象属性的问题

你遇到的问题是因为np.nditer返回的迭代元素并不是直接的example实例,而是被包装成了一个0维NumPy数组对象,这个数组对象自然没有你定义的.number属性,所以才会抛出AttributeError。

下面给你几种可行的解决方案:

方案1:从nditer的结果中提取实际对象

使用x.item()或者x[()]可以把0维数组里包装的example实例取出来,之后就能正常访问属性了:

import numpy as np
class example:
    def __init__(self):
        self.number = 1
a = example()
b = example()
c = example()
d = example()
array = np.array([[a,b],[c,d]],dtype=np.object)

for x in np.nditer(array, ["refs_ok"]):
    # 提取实际对象并访问属性
    print(x.item().number)
    # 或者用 print(x[()].number)

方案2:直接嵌套遍历二维数组

如果不需要用nditer,直接遍历数组的行和元素会更直观,拿到的就是原始的example实例:

import numpy as np
class example:
    def __init__(self):
        self.number = 1
a = example()
b = example()
c = example()
d = example()
array = np.array([[a,b],[c,d]],dtype=np.object)

for row in array:
    for obj in row:
        print(obj.number)

方案3:使用数组的flat属性展平遍历

利用NumPy数组的flat属性可以把二维数组展平为一维迭代器,遍历起来更简洁:

import numpy as np
class example:
    def __init__(self):
        self.number = 1
a = example()
b = example()
c = example()
d = example()
array = np.array([[a,b],[c,d]],dtype=np.object)

for obj in array.flat:
    print(obj.number)

这几种方法都能成功打印每个对象的number属性,你可以根据自己的需求选择最合适的方式~

内容的提问来源于stack exchange,提问作者Shuo Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:47:30