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

Jim*_*y C 12 python numpy matrix

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

例:

a = np.asarray([[1,2,3],[1,5,7],[4,3,6]])
monotonically_increasing(a)
Run Code Online (Sandbox Code Playgroud)

预期收益:

[True, True, False]
Run Code Online (Sandbox Code Playgroud)

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

wwi*_*wii 27

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

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

>>> np.diff(a)
array([[ 1,  1],
       [ 4,  2],
       [-1,  3]])
Run Code Online (Sandbox Code Playgroud)

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

>>> np.diff(a) > 0
array([[ True,  True],
       [ True,  True],
       [False,  True]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

检查所有差异是否> 0

>>> np.all(np.diff(a) > 0)
False
>>> 
Run Code Online (Sandbox Code Playgroud)

正如@Jaime所建议的那样 - 检查每个元素是否大于其左边的元素:

np.all(a[:, 1:] >= a[:, :-1], axis=1)
Run Code Online (Sandbox Code Playgroud)

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

  • 将每个项目直接与相邻项目进行比较可能会更快,而不是比较它们的差异是否大于零:`np.all(a [:,1:]> = a [:,: - 1],axis = 1 )` (8认同)