给定两个numpy
数组
import numpy as np
arrA = np.array([0, 1, 2])
arrB = np.array([1, 4, 9])
字符串
我想实现一个方法,当且仅当第一个数组中的所有值都小于第二个数组中的相应值时,返回True
。在这种情况下,它是True
,因为0<1, 1<4, 2<9
。
由于实际应用中的数组非常庞大(大约1000个元素),因此最好有一个有效的方法。
第一个尝试是(arrA < arrB).all()
,但它必须计算所有索引中的布尔值。下面的一个使用理解,我相信这是最快的一个。
isAllLessThan = all(x < y for (x, y) in zip(arrA, arrB))
型numpy
是否有任何方法(类似于np.all_less
)可以应用于这种情况?
1条答案
按热度按时间frebpwbc1#
python和numpy方法的行为不同。
是的,numpy必须计算所有的组合,但它做得非常快,比python快得多。然而,Python的
all
能够在满足False
时短路测试。做第一个测试,其中B > A总是true,numpy更快:
的数据
在A = B的第二个测试中,因此第一个比较已经是假的,理解方法是常数时间:
的
在现实生活中,你可能介于两者之间,所以最好的方法取决于有一个False的概率。
以下是比较各种短路概率的时序的图表:
的