Если это действительно проблема, которую вы хотите решить, то есть гораздо лучшее решение:
A[A<=0.5] = 0.0
Однако проблема с вашим кодом состоит в том, что если условие выполняется, вы возвращаете целое число 0, а не с плавающей точкой 0,0. Из документации:
Тип данных вывода vectorized
определяется путем вызова функции с первым элементом ввода. Этого можно избежать, указав аргумент otypes
.
Поэтому, когда самая первая запись - <0.5
, она пытается создать массив целых чисел, а не чисел с плавающей точкой.
Вы должны изменить return 0
на
return 0.0
В качестве альтернативы, если вы не хотите касаться my_func
, вы можете использовать
f = np.vectorize(my_func, otypes=[np.float])