Python 对象属性的Numpy数组

Python 对象属性的Numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个多维对象数组,类似于: a = np.array([obj1,obj2,obj3]) 对象是具有多个属性的类的实例。假设其中一个是高度,另一个是长度。要获得相应的多维长度和高度数组,我需要: lengths = np.array([obj1.length,obj2.length,obj3.length]) heights = np.array([obj1.height,obj2.height,obj3.height]) 这已经开始把我的代码弄得乱七八糟了。有没有更有效的方法?

我有一个多维对象数组,类似于:

 a = np.array([obj1,obj2,obj3])
对象是具有多个属性的类的实例。假设其中一个是高度,另一个是长度。要获得相应的多维长度和高度数组,我需要:

 lengths = np.array([obj1.length,obj2.length,obj3.length])

 heights = np.array([obj1.height,obj2.height,obj3.height])
这已经开始把我的代码弄得乱七八糟了。有没有更有效的方法?例如,我有一个

 heights = a.height
记住,但显然它不起作用,因为a是我的对象的数组,而不是我的对象。但是有没有类似的事情我可以做,是有效的和蟒蛇?我试过类似的东西

 for x in np.nditer(a,flags=['refs_ok']):
    print x.length
看看会发生什么,但它不起作用,因为nditer不知何故返回了一个元组

有什么想法吗

您可以使用以下功能:

>>> import numpy
>>> 
>>> class Obj(object):
...     def __init__(self, x, y):
...         self.x = x
...         self.y = y
... 
>>> arr = numpy.array([Obj(1, 2), Obj(3, 4), Obj(5, 6)])
>>> 
>>> vectorized_x = numpy.vectorize(lambda obj: obj.x)
>>> 
>>> vectorized_x(arr)
array([1, 3, 5])
虽然我不确定是否应该首先存储Python对象的NumPy数组。矢量化并不比Python循环更有效。存储(n+1)-D数组会更有效,因为我们可以简单地通过切片提取内容,这是一种本机操作,例如

>>> a = numpy.array([[(1, 2), (3, 4), (5, 6)], [(7, 8), (9, 10), (11, 12)], [(-13, -14), (-15, -16), (-17, -18)]])
>>> a[:,:,0]
array([[  1,   3,   5],
       [  7,   9,  11],
       [-13, -15, -17]])
>>> a[:,:,1]
array([[  2,   4,   6],
       [  8,  10,  12],
       [-14, -16, -18]])

你能提供更多的代码吗?这正是你正在做的?包括一个最小的类来重现这个错误和你得到的错误的回溯。你读过这个吗: