我有一个多维的对象数组。我想使用nditer迭代器来交互对象。 这是一个代码示例:
import numpy as np
class Test:
def __init__(self,a):
self.a = a
def get_a(self):
return self.a
b = np.empty((2,3),dtype = object)
t_00 = Test(0)
t_01 = Test(1)
t_11 = Test (11)
b[0,0] = t_00
b[0,1] = t_01
b[1,1] = t_11
for item in np.nditer(b,flags = ["refs_ok"]):
if item:
print item.get_a()
我希望“item”包含可用于访问数据的对象引用。 但是我收到以下错误:AttributeError:'numpy.ndarray'对象没有属性'get_a' 我的问题是如何通过数组访问数组中的对象?
答案 0 :(得分:0)
迭代的array.flat方法将起作用,并且可以确认这是否符合您的预期
for item in b.flat:
if item:
print item.get_a()
答案 1 :(得分:0)
使用nditer
遍历数组可将原始数组单元格的视图显示为0维数组。对于非对象数组,这几乎等同于生成标量,因为0维数组通常表现得像标量,但是不适用于对象数组。
如果您确定要通过nditer
,则可以使用item()
方法从0维视图中提取元素:
for element in np.nditer(b,flags = ["refs_ok"]):
element = element.item()
if element:
print(element.get_a())