2012-04-07 60 views
1

我已经有了一个numpy的自定义对象数组。我怎样才能得到一个新的数组包含这些对象的特定属性的值?访问numpy数组中对象的属性

实施例:

import numpy as np 

class Pos(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

arr = np.array([ Pos(0,1), Pos(2,3), Pos(4,5) ]) 

# Magic line 
xy_arr = .... # arr[ [arr.x,arr.y] ] 

print xy_arr 
# array([[0,1], 
     [2,3], 
     [4,5]]) 

我要补充,我的用于这样的操作的动机是计算在阵列中的物体的质量中心。

+2

你有使用数组的原因吗?这实际上并不是真正意义上使用numpy数组的方式,像这样使用它们通常比使用python列表更麻烦和慢。 – 2012-04-07 00:52:01

+0

我正在使用一个数组作为索引功能。我有浮点数组“A”,形状与“arr”相同,必须根据“A”中的阈值从“arr”中选择元素 – ajwood 2012-04-07 00:57:26

回答

1

通常,当我有多个数量属于一起,我想从numpys索引功能中受益时,我使用记录数组。要小心,如果你做了很多追加/删除操作,numpy在速度方面可能相当无效。

如果我理解您的评论正确的,这是两个数值由第三选定一个例子:

import numpy as np 

# create a table for your data 
dt = np.dtype([('A', np.double), ('x', np.double), ('y', np.double)]) 
table = np.array([(1,1,1), (2,2,2), (3,3,3)], dtype=dt) 

# define a selection mask 
selection = table['A'] > 1.5 
columns = ['x', 'y'] 

print table[selection][columns] 

一个很好的副作用是使用h5py保存这个表是非常简单和方便,因为您的数据已被标记。