Как красиво передать скаляр numpy в функцию на python?

#python #numpy

#python #numpy

Вопрос:

У меня есть массив numpy a , и я хочу передать его элементы функции func в цикле:

 a = np.array([0, 0, 1], dtype='bool')

def func(x):
    if x is True:
        # do something
    else:
        # do something else

for i in np.arange(3):
    res = func(a[i])
  

Я ожидаю a[i] , что будет <class 'bool'> , но на самом деле это <class 'numpy.bool_'> так, и я должен использовать a[i].item() каждый раз, чтобы преобразовать его в скаляр python, который подвержен ошибкам.

 for i in np.arange(3):
    res = func(a[i].item())
  

Есть ли лучший способ сделать это?

Комментарии:

1. for x in a.tolist(): res = func(x) может сработать. Итерация по списку выполняется быстрее, чем итерация по массиву. Но вы уверены, что вас func беспокоит получение bool_ объекта вместо простого python bool ?

2. Если ваша функция правильно типизирована, это не должно быть проблемой.

3. @hpaulj Спасибо за подсказку. Вы правы. Я обнаружил, что если я изменю условие if if x is True: на if x: , то тип больше не будет проблемой, но мне все еще интересно, в чем разница между этими двумя условиями if.

4. is тесты на идентификацию объекта. if x: тесты на значение, ‘truthiness’. 1 , ‘foobar’, [123] являются ‘true’, не будучи идентичными уникальному True логическому объекту.