Я ищу быстрый способ вычислить следующее:Преобразования вещественной Numpy массива двоичного массива знакомы
import numpy as np
a = np.array([-1,1,2,-4,5.5,-0.1,0])
Теперь я хочу, чтобы бросить a
в массив двоичных значений, таким образом, что он имеет 1 для каждого положительного входа a
и 0 в противном случае. Так что результат я хочу это:
array([ 0., 1., 1., 0., 1., 0., 0.])
Одним из способов достижения этой цели будет
np.array([x if x >=0 else 0 for x in np.sign(a)])
array([ 0., 1., 1., 0., 1., 0., 0.])
Но я надеюсь, кто может указать на более быстрое решение.
%timeit np.array([x if x >=0 else 0 for x in np.sign(a)])
100000 loops, best of 3: 11.4 us per loop
EDIT: временные большие решения из ответов
%timeit (a > 0).astype(int)
100000 loops, best of 3: 3.47 us per loop
Что вы собираетесь делать с результатом? Я спрашиваю, потому что логический массив, созданный 'a> 0', может работать без преобразования его типа' int' или 'int8'. –
@ WarrenWeckesser Хорошая точка. Я буду вычислять расстояния, такие как hamming, поэтому я проверю, могу ли я быстрее работать с булевыми массивами. – benbo