2010-11-12 24 views
2

所以我試圖檢測一個數組中的值是否在一定範圍內,然後返回一個二進制邏輯數組,即一個爲true,零爲false。我有這個,但是IPython的不斷抱怨如何檢測數組中的值是否在一定範圍內並在Python中返回二進制數組?

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

有趣的事情是,僅僅一個檢驗工作方式完全確定

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

我覺得這有點令人費解。

+0

「我覺得有點令人費解」。這是令人困惑的代碼。你能解釋爲什麼你認爲這是明智的代碼?你認爲這會做什麼? – 2010-11-12 13:16:01

+1

@ S.Lott看起來像X是一個numpy陣列 – 2010-11-12 13:19:30

+0

@ S.Lott你完全正確。我認爲Python會奇蹟般地理解我想要找到一到兩個之間的所有值。我不知道我在想什麼。很顯然,在工作太多後我很渾渾噩噩...... – 2010-11-13 12:44:32

回答

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之後是[0,1,1,1,0]。那是你想要的嗎?

+1

用列表理解替換地圖... b = [1 Ant 2010-11-12 13:16:00

+0

是的!有趣的思維方式,一點在Python的新手,所以我仍然在努力的一些概念或做事的方式。這似乎相當強大,但。 – 2010-11-13 13:02:29

+0

我很喜歡這個概念!我想這會改變我的整個思維方式。 – 2010-11-13 13:15:56

0

This?

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

嘗試使用all(編輯返回int):

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

unutbu的時間較短,這是比較明確的

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