Python 2.6 numpy交互数组对象错误
我有一个多维的对象数组。我想使用nditer迭代器对对象进行交互。 下面是一个代码示例:Python 2.6 numpy交互数组对象错误,python,numpy,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)
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'
我的问题是如何通过数组访问数组中的对象?迭代的array.flat方法将起作用,并且可以确认这是否如您所期望的那样起作用
for item in b.flat:
if item:
print item.get_a()
使用
nditer
对数组进行迭代,可以将原始数组的单元格视为0维数组。对于非对象数组,这几乎等同于生成标量,因为0维数组的行为通常类似于标量,但这不适用于对象数组
如果您决定为此执行nditer
,则可以使用item()
方法从0维视图中提取元素:
for element in np.nditer(b,flags = ["refs_ok"]):
element = element.item()
if element:
print(element.get_a())
我在代码中看到的一个问题是get_a需要返回self.a,而不是a。你是对的。然而,我有一个基本问题,我根本无法访问“测试对象”。似乎每个“项目”都是指一个numpy.ndarrayTanks Jason!不过,我仍在尝试了解如何使用nditer迭代器。如果我有一个带有正则数的数组,它可以正常工作。当我有对象时,就会出现问题。但我可以看到nditer正在重新调用正确的对象地址,但可能是错误的类型。遗憾的是,如果您打算修改对象数组项,这将不起作用。