In [226]: [[['foo' in ele.keys()] for ele in row] for row in arr]
Out[226]:
[[[True], [False], [False], [False]],
[[False], [False], [False], [True]],
[[False], [False], [True], [False]]]
Сделать это массивом, дающим форму (3,4,1). where
возвращает набор массивов, по одному для каждого измерения.
Использование группировки () вместо [] дает 2d массив:
In [227]: [[('foo' in ele.keys()) for ele in row] for row in arr]
Out[227]:
[[True, False, False, False],
[False, False, False, True],
[False, False, True, False]]
frompyfunc
- это еще один способ применения функции к каждому элементу массива. Он имеет тенденцию быть немного быстрее, чем явные циклы (до 2х), и особенно хорош при работе с массивами dtype объекта:
In [228]: np.frompyfunc(lambda d: 'foo' in d.keys(),1,1)(arr)
Out[228]:
array([[True, False, False, False],
[False, False, False, True],
[False, False, True, False]], dtype=object)
In [229]: np.where(_)
Out[229]: (array([0, 1, 2]), array([0, 3, 2]))