检查两个numpy数组行是否同时满足命题

时间:2018-02-27 22:26:48

标签: python arrays python-3.x numpy

这是我之前的一个问题的后续帖子:

Check whether numpy array row is smaller than the next

假设我有以下numpy数组:

a=np.reshape(np.array([[79,np.nan,87,77,92,133,99,121,103,118,126, 
133,131,67]]),(7,2))

In [1]: a
Out[1]: 
array([[  79.,   nan],
       [  87.,   77.],
       [  92.,  133.],
       [  99.,  121.],
       [ 103.,  118.],
       [ 126.,  133.],
       [ 131.,  67.]])

我想创建一个新的列或数组,它将是一个真/假指标,用于测试以下命题:

a[-1, 0] < a[1:, 0] and a[-1, 1] > a[1:, 1]

我期望的结果如下:

False (because the first value of column 1 is nan)
False
True
True
False
True
False

我尝试过上一篇文章中描述的解决方案的不同变体,但到目前为止我还没有成功。

编辑:

想法是测试87 <92并且同时77> 133是否为假。然后是92&lt; 99和133&gt; 121,这是真等。

1 个答案:

答案 0 :(得分:1)

您将在之前的帖子中使用与Tai's answer完全相同的策略:

b = np.diff(a, axis=0)

[[   8.   nan]
 [   5.   56.]
 [   7.  -12.]
 [   4.   -3.]
 [  23.   15.]
 [   5.  -66.]]

现在你在数组b上使用逻辑函数np.logical_and。由于您总是希望尾随错误,我们只需追加它:

result = np.logical_and(b[:,0] > 0, b[:,1] < 0)
result = np.append(result, np.array([False]))

[False False  True  True False True False]

(根据你的评论编辑我的帖子)

注意:将值与nan进行比较将始终返回False。因此,如果nan出现在中间的某一行中,它将始终产生两个行,其评估为False