2010-11-12 25 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]) 
相关问题