我有一个numpy ndarray,我想检查每个行向量是否单调递增。
示例:
a = np.asarray([[1,2,3],[1,5,7],[4,3,6]])
monotonically_increasing(a)
预期回报:
[True, True, False]
我不完全确定如何有效地做到这一点,因为预计矩阵会非常大(~1000x1000),并且希望得到一些帮助。
答案 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]