如何在具有类实例的数组中使用np.where()?

时间:2016-05-12 18:46:09

标签: python class numpy

我有以下课程:

class IdFuns(object):
    def __init__(self,i,p,v,u):
        self.i = i
        self.p = p
        self.v = v
        self.u = u

当我放入循环时,我得到以下数组,其中包含类的实例:

   array([
   <__main__.IdFuns object at 0x7fc8362e8250>,
   <__main__.IdFuns object at 0x7fc8362e8290>,
   <__main__.IdFuns object at 0x7fc8362e82d0>,
   <__main__.IdFuns object at 0x7fc8362e8310>,
   <__main__.IdFuns object at 0x7fc8362e8350>,
   <__main__.IdFuns object at 0x7fc8362e8390>,
   <__main__.IdFuns object at 0x7fc8362e83d0>,
   <__main__.IdFuns object at 0x7fc8362e8410>,
   <__main__.IdFuns object at 0x7fc8362e8450>,
   <__main__.IdFuns object at 0x7fc8362e8490>,
   <__main__.IdFuns object at 0x7fc8362e84d0>,
   <__main__.IdFuns object at 0x7fc8362e8510>,
   <__main__.IdFuns object at 0x7fc8362e8550>], dtype=object)

我想知道如何使用np.where()搜索我是否有一个 .i = 1 的实例。

1 个答案:

答案 0 :(得分:3)

.i是对象数组中个别项的属性,而不是数组本身的属性。因此,您需要在Python中循环这些项,例如使用列表解析:

bool_idx = [item.i == 1 for item in object_array]

然后可以将其作为第一个参数传递给np.where

locs = np.where(bool_idx)

一般情况下,我建议您避免使用np.object数组。由于它们不支持向量化操作,因此与标准Python list相比,它们并没有真正提供任何显着的性能提升。我认为您可能最好使用structured numpy arraypandas.DataFrame