2012-01-06 46 views
3

我有一个多维的对象数组。我想使用nditer迭代器对这些对象进行交互。 下面是一个代码示例:Python 2.6 numpy交互数组对象错误

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() 

我期望“项”来包含我可用于访问数据对象引用。 但是我收到以下错误:AttributeError:'numpy.ndarray'对象没有属性'get_a' 我的问题是如何通过数组访问数组中的对象?

+0

一个问题我在代码中看到的是,get_a需要返回self.a,而不是。 – ditkin 2012-01-06 09:24:00

+1

你说得对。但是,我有一个基本问题,就是根本无法访问“测试对象”。看来,每个“项目”是指numpy.ndarray – user963386 2012-01-06 09:42:25

回答

0

迭代的array.flat方法将工作,并可以确认这个工作你会期望

for item in b.flat: 
    if item: 
     print item.get_a() 
+1

谢谢贾森!不过,我仍然试图找出如何使用nditer迭代器。如果我有一个具有常规数字的数组,它可以正常工作。当我有物体时,有一个问题。但我可以看到nditer正在重建正确的对象地址,但可能是错误的类型。 – user963386 2012-01-06 22:11:43

+0

不幸的是,如果你打算修改对象数组项目,这将不起作用。 – mueslo 2017-04-10 11:46:34