gpt4 book ai didi

numpy - 是否有一种比线性更快的方式在numpy中查找 bool 条件的端点?

转载 作者:行者123 更新时间:2023-12-04 18:12:55 24 4
gpt4 key购买 nike

有谁知道一种(常见情况)比线性快的方法来查找数组的 bool 属性的端点。

例如,numpy.nonzero(a)[0] [-1]是a(dimension = 0)的最后一个非零元素的索引,类似地numpy.nonzero(a)[0] [0]是a的索引。第一个非零元素。

如果我们知道我们只关心第一个或最后一个元素,则可以使用更少的内存,并且比上面的“nonzero”运行更好的普通情况下运行时。例如,如果我们坚持线性搜索,那么我们至少可以从适当的结尾开始(向后搜索以找到与条件匹配的最后一个值)。或者我们可以使用二进制搜索(例如,如果中间元素匹配条件,则我们不需要检查前一半来找到最后一个为真的元素)。
这似乎很常见,以至于可能存在现有的实现,但是我还没有找到类似的实现。

最佳答案

您可以使用argmax找到 bool 数组的第一个True元素。

a = np.array([False, False, True, True, True])
first_True = a.argmax()
last_True = len(a) - 1 - a[::-1].argmax()

您可以使用 argmin来查找False值,这比使用非零值更快并且占用更少的内存,但这在 a的长度上是线性的。如果您想比线性更快,则需要知道 a是“sorted”的,对于一个 bool 数组,这意味着您有一个False块,后跟所有True。在这种情况下,您可以使用搜索排序来找到False和true之间的边界:
first_True = a.searchsorted(True, 'left')

关于numpy - 是否有一种比线性更快的方式在numpy中查找 bool 条件的端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com