2012-01-06 47 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