Я пытаюсь np.vectorize аа один период видел функцию зуба с помощью numpy.vectorize с этой лямбда-функции:Numpy Vectorize Поведение
saw = lambda x: 0 if x < -2 or x > 2 else x
Но когда я применяю векторизованную saw
к этому массиву:
array([-4. , -3.57894737, -3.15789474, -2.73684211, -2.31578947,
-1.89473684, -1.47368421, -1.05263158, -0.63157895, -0.21052632,
0.21052632, 0.63157895, 1.05263158, 1.47368421, 1.89473684,
2.31578947, 2.73684211, 3.15789474, 3.57894737, 4. ])
я получаю:
array([ 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0])
Что здесь происходит?
Для рассмотрения я использую Python 2.7 с Numpy 1.10.2
Просьба показать все соответствующие коды, которые вы использовали для его создания. Похоже, что ваши данные преобразуются в целые числа. Может быть, измените на 'saw = lambda x: 0.0 if x < -2 or x > 2 else x'? – SethMMorton
Примечание: для этого лучше использовать 'np.where' вместо' np.vectorize'. 'np.vectorize' очень медленный. – user2357112
В этом случае 'where' в 2 раза быстрее, чем' vectorize'. С булевым маскированием я могу сделать это 3 раза. – hpaulj