Python 2.6 numpy交互数组对象错误

时间:2012-01-06 09:18:41

标签: python 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 :(得分: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())