2010-11-12 46 views
2

J'essaie donc de détecter si les valeurs d'un tableau se trouvent dans une certaine plage, puis de retourner un tableau logique binaire, c'est-à-dire un pour vrai et zéro pour faux. J'ai cela, mais ipython se plaindre motiveComment détecter si les valeurs dans le tableau sont dans une certaine plage et retourner un tableau binaire en Python?

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

la chose intéressante est que tout simplement vérifier une façon fonctionne totalement ok

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

que je trouve un peu perplexe.

+0

"Je trouve un peu perplexe". C'est un code embarrassant. Pourriez-vous expliquer pourquoi vous pensez que c'est un code sensé? Que pensez-vous que cela va faire? –

+1

@ S.Lott ressemble à X est un tableau numpy –

+0

@ S.Lott votre totalement à droite. Je pensais que Python comprendrait magiquement que je voulais trouver toutes les valeurs entre un et deux. Je ne sais pas ce que je pensais. Évidemment j'étais délirant après avoir travaillé trop ... –

Répondre

2
Y=X[0,:]+X[1,:] 
D = ((1<Y) & (Y<2)).astype(int) 
1
array = (1, 2, 3, 4, 5) 
bit_array = map(lambda x: 1 < x < 5 and 1 or 0, array) 

bit_array est [0, 1, 1, 1, 0] après cela. Est-ce ce que tu voulais?

+1

Remplacer la carte par la compréhension de la liste ... b = [1 Ant

+0

Oui exactement! Une manière de penser intéressante, un peu novice chez Python, donc je suis encore aux prises avec des concepts ou des façons de faire. Cela semble assez puissant cependant. –

+0

J'adore ce concept! Je pense que va changer toute ma façon de penser. –

0

Ceci?

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

Essayez d'utiliser all (sous la direction de revenir int):

D = numpy.all([1 < x, x < 2], axis=0).astype(int) 
1

unutbu s est plus courte, ce qui est plus explicite

>>> import numpy 
>>> numpy.logical_and(1 < np.arange(5), np.arange(5)< 4).astype(int) 
array([0, 0, 1, 1, 0])