2015-12-21 95 views
1

我有一个结构化的numpy阵列:NumPy的:检查是否字段存在

>>> import numpy 
>>> a = numpy.zeros(1, dtype = [('field0', 'i2'), ('field1', 'f4')]) 

然后我开始找回一些值。但是,我不知道,如果我的数组包含某个字段。因此,如果我试图达成一个不存在的场,我果然收到IndexError

>>> a[0]['field0'] 
0 
>>> a[0]['field2'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: invalid index 

我当然可以去try-except;然而,这将有可能掩盖了一些错误,如IndexError不指定,在哪个级别,我打非现有的索引:

>>> try: 
...  a[9999]['field2']['subfield3'] 
... except IndexError: 
...  print('Some index does not exist') 
... 
Some index does not exist 

我也试图接近numpy数组作为列表,但这不起作用:

>>> if 'field0' in a[0]: 
...  print('yes') 
... else: 
...  print('no') 
... 
no 

因此,问题:有没有一种方法来检查,如果某一领域的结构性numpy数组存在?

回答

5

你可以检查.dtype.names.dtype.fields

>>> a.dtype.names 
('field0', 'field1') 
>>> 'field0' in a.dtype.names 
True 
>>> a.dtype.fields 
mappingproxy({'field0': (dtype('int16'), 0), 'field1': (dtype('float32'), 2)}) 
>>> 'field0' in a.dtype.fields 
True