Python NumPy-1D数组的最快惰性词典比较

Python NumPy-1D数组的最快惰性词典比较,python,arrays,numpy,comparison,lazy-evaluation,Python,Arrays,Numpy,Comparison,Lazy Evaluation,我有两个NumPy 1D阵列a和b 我如何比较它们?这意味着1D数组的比较方式应该与Python比较元组的方式相同 最重要的是,这应该是惰性的,也就是说,函数应该在已知结果的最左边找到结果后立即返回 另外,我正在寻找最快的numpy阵列解决方案。对于一些矢量化实现,可能使用其他numpy函数 否则,非惰性简单实现可能如下所示: i = np.flatnonzero((a < b) != (a > b)) print('a ' + ('==' if i.size == 0 else '

我有两个NumPy 1D阵列
a
b

我如何比较它们?这意味着1D数组的比较方式应该与Python比较元组的方式相同

最重要的是,这应该是惰性的,也就是说,函数应该在已知结果的最左边找到结果后立即返回

另外,我正在寻找最快的numpy阵列解决方案。对于一些矢量化实现,可能使用其他numpy函数

否则,非惰性简单实现可能如下所示:

i = np.flatnonzero((a < b) != (a > b))
print('a ' + ('==' if i.size == 0 else '<' if a[i[0]] < b[i[0]] else '>') + ' b')

但它能在numpy中实现得又慢又快吗?我需要惰性行为,因为1D数组可能非常大,但在大多数情况下,比较结果非常接近于开头。

在纯python中,您可以迭代
zip
ped列表:

def lazy_compare(a, b):
    for x, y in zip(a, b):
        if x < y:
            return 'a < b'
        if x > y:
            return 'a > b'
    return 'a == b'
输出:

a > b
a < b
a == b
a>b
a

由于
zip
返回一个迭代器,该迭代器仅在您使用时生成值,因此这是一种惰性的方法,它会在找到一个结果后立即返回结果,因此,如果两个列表相等,则只需检查整个列表。

注释不用于扩展讨论;这段对话已经结束。
def lazy_compare(a, b):
    for x, y in zip(a, b):
        if x < y:
            return 'a < b'
        if x > y:
            return 'a > b'
    return 'a == b'
print(lazy_compare(['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'b', 'd', 'e']))
print(lazy_compare(['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'f']))
print(lazy_compare(['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']))
a > b
a < b
a == b