numpy.where在结构化数组上,对象dtype为元组

时间:2014-09-11 11:08:33

标签: arrays object numpy tuples where

import numpy as np
rec=np.recarray((10,),names=('x'),formats=('object'))
for i in rec:
    i.x=(0,0)
print np.where(rec.x==(0,0))

结果是(array([], dtype=int32),),而不是我预期的0到9。为什么?任何人都可以为我解释一下,我该如何获得这种结构化数组的索引?

1 个答案:

答案 0 :(得分:0)

效率更高:

rec = np.zeros(10, [('x', [('a', int), ('b', int)] )] )

这样你就可以在内存中存储一​​个紧凑的表示,你可以比较元素:

rec == rec[0]

请注意,搜索双零仍然有点棘手,但您可以一般性地执行此操作:

rec == np.zeros(1, rec.dtype)

如果您不需要引用该对的单个x,则可以删除该级别的记录结构:

rec = np.zeros(10, [('x0', int), ('x1', int)])

或者最简单:

rec = np.zeros(10, [('x', '2i')])

在任何情况下,比较都会起作用。