Как определить, находятся ли значения в массиве в определенном диапазоне и вернуть ли двоичный массив в Python? - PullRequest
2 голосов
/ 12 ноября 2010

Поэтому я пытаюсь определить, находятся ли значения в массиве в определенном диапазоне, а затем вернуть двоичный логический массив, т. Е. Один для true и ноль для false. У меня есть, но iPython продолжает жаловаться

D = ( 1 < X[0,:] + X[1,:]) < 2 ).astype(int)

Интересно то, что просто проверка в одну сторону работает нормально

D = ( X[0,:] + X[1,:]) < 2 ).astype(int)

, что я нахожу немного озадачивающим.

Ответы [ 5 ]

2 голосов
/ 12 ноября 2010
Y=X[0,:]+X[1,:]
D = ((1<Y) & (Y<2)).astype(int)
1 голос
/ 12 ноября 2010

unutbu короче, это более явно

>>> import numpy
>>> numpy.logical_and(1 < np.arange(5), np.arange(5)< 4).astype(int)
array([0, 0, 1, 1, 0])
1 голос
/ 12 ноября 2010
array = (1, 2, 3, 4, 5)
bit_array = map(lambda x: 1 < x < 5 and 1 or 0, array)

bit_array - [0, 1, 1, 1, 0] после этого. Это то, что вы хотели?

0 голосов
/ 12 ноября 2010

Попробуйте использовать all (отредактировано для возврата int):

D = numpy.all([1 < x, x < 2], axis=0).astype(int)
0 голосов
/ 12 ноября 2010

Это

 bits = [ bool(low <= value < high) for value in some_list ]
...