#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_
объекта вместо простого pythonbool
?2. Если ваша функция правильно типизирована, это не должно быть проблемой.
3. @hpaulj Спасибо за подсказку. Вы правы. Я обнаружил, что если я изменю условие if
if x is True:
наif x:
, то тип больше не будет проблемой, но мне все еще интересно, в чем разница между этими двумя условиями if.4.
is
тесты на идентификацию объекта.if x:
тесты на значение, ‘truthiness’.1
, ‘foobar’,[123]
являются ‘true’, не будучи идентичными уникальномуTrue
логическому объекту.