有效地检查numpy ndarray值是否严格增加

时间:2015-06-09 13:59:02

标签: python numpy matrix

我有一个numpy ndarray,我想检查每个行向量是否单调递增。

示例:

a = np.asarray([[1,2,3],[1,5,7],[4,3,6]])
monotonically_increasing(a)

预期回报:

[True, True, False]

我不完全确定如何有效地做到这一点,因为预计矩阵会非常大(~1000x1000),并且希望得到一些帮助。

2 个答案:

答案 0 :(得分:24)

>>> import numpy as np
>>> a = np.asarray([[1,2,3],[1,5,7],[4,3,6]])

找出每个元素之间的差异。 np.diff有一个参数,允许您指定轴执行diff

>>> np.diff(a)
array([[ 1,  1],
       [ 4,  2],
       [-1,  3]])

检查每个差异是否大于0.

>>> np.diff(a) > 0
array([[ True,  True],
       [ True,  True],
       [False,  True]], dtype=bool)

检查是否所有差异都是> 0

>>> np.all(np.diff(a) > 0)
False
>>> 

根据@Jaime的建议 - 检查每个元素是否大于左侧元素

np.all(a[:, 1:] >= a[:, :-1], axis=1)

这似乎是我的diff解决方案的两倍快/效率。

答案 1 :(得分:2)

你可以制作这样的函数:

def monotonically_increasing(l):
    return all(x < y for x, y in zip(l, l[1:]))

然后检查它,子列表的子列表,所以

[monotonically_increasing(sublist) for sublist in a]