我有两个 NumPy 1D 数组 a
和 b
。
我如何对它们进行 字典序 比较?也就是说,应该像 Python 比较元组一样比较这些 1D 数组。
主要的问题在于这应该是惰性完成的,也就是说,函数应该在已知结果的最左侧出现时立即返回结果。
此外,我正在寻找 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')
或者使用简单但速度较慢的懒惰变体,因为它使用纯Python类型:
ta, tb = tuple(a), tuple(b)
print('a ' + ('<' if ta < tb else '==' if ta == tb else '>') + ' b')
另一种解决方案是使用
np.lexsort
,但问题是它是否针对仅具有两列(两个1D数组)进行了优化,或者根本不懒惰?此外,问题是lexsort的结果可能不足以具有三种答案可能性<
/==
/>
,可能只足以告诉是否<=
。另外,lexsort需要一些非懒惰的预处理,如np.stack和反转行顺序。print('a ' + ('<=' if np.lexsort(np.stack((a, b), 1)[::-1])[0] == 0 else '>') + ' b')
但是它能在numpy中实现懒惰且快速吗?我需要懒惰的行为,因为1D数组可能非常大,但在大多数情况下比较结果非常接近开头。