这是我以前问题的后续文章:
检查numpy阵列行是否小于下一个
假设我有以下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&lt; 92和同时77> 133是错误的。然后是92&lt; 99和133> 121,它是真实等。
您将使用与上一篇文章中Tai的答案完全相同的策略:
b = np.diff(a, axis=0)
[[ 8. nan]
[ 5. 56.]
[ 7. -12.]
[ 4. -3.]
[ 23. 15.]
[ 5. -66.]]
现在,您在数组b
上使用逻辑函数np.logical_and
。由于您总是想要一个拖延false ,我们可以附加它:
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
的两行。