Python 2.6 numpy 交互数组对象错误
我有一个多维的对象数组。我想用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'这个属性。我的问题是,我该如何遍历这个数组来访问数组中的对象呢?
2 个回答
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())
0
数组的 flat 方法可以用来进行遍历,确实可以确认它的效果是你所期待的。
for item in b.flat:
if item:
print item.get_a()