gpt4 book ai didi

python - numpy.searchsorted 有多个来源

转载 作者:太空狗 更新时间:2023-10-30 02:13:01 26 4
gpt4 key购买 nike

假设我在表单中有两个数组

a = [0, 0, 1, 1, 2, 3, 3, 3, 4, 4, 5, 6]
b = [1, 2, 1, 2, 1, 4, 7, 9, 4, 8, 1, 1]

如您所见,当将 ab 视为 super 数组的列时,上述数组已排序。

现在,我想对该数组进行搜索排序。例如,如果我搜索 (3, 7)(a = 3 和 b = 7),我应该得到 6。

只要 a 中有重复的值,就应该继续搜索 b 中的值。

是否有内置的 numpy 方法可以做到这一点?或者假设我的数组中有数百万个条目,什么是有效的方法。

我尝试使用 numpy.recarray,用 ab 创建一个 recarray 并尝试在其中搜索,但我收到以下错误。

TypeError: expected a readable buffer object

非常感谢任何帮助。

最佳答案

你快到了。只是 numpy.record(考虑到您收到的错误消息,这是我假设您使用的)并不是您真正想要的;只需创建一个单项记录数组:

>>> a_b = numpy.rec.fromarrays((a, b))
>>> a_b
rec.array([(0, 1), (0, 2), (1, 1), (1, 2), (2, 1), (3, 4), (3, 7), (3, 9),
(4, 4), (4, 8), (5, 1), (6, 1)],
dtype=[('f0', '<i8'), ('f1', '<i8')])
>>> numpy.searchsorted(a_b, numpy.array((3, 7), dtype=a_b.dtype))
6

了解 sortargsort 对记录数组进行词法排序可能也很有用,还有 lexsort .使用 lexsort 的示例:

>>> random_idx = numpy.random.permutation(range(12))
>>> a = numpy.array(a)[random_idx]
>>> b = numpy.array(b)[random_idx]
>>> sorted_idx = numpy.lexsort((b, a))
>>> a[sorted_idx]
array([0, 0, 1, 1, 2, 3, 3, 3, 4, 4, 5, 6])
>>> b[sorted_idx]
array([1, 2, 1, 2, 1, 4, 7, 9, 4, 8, 1, 1])

排序记录数组:

>>> a_b = numpy.rec.fromarrays((a, b))
>>> a_b[a_b.argsort()]
rec.array([(0, 1), (0, 2), (1, 1), (1, 2), (2, 1), (3, 4), (3, 7), (3, 9),
(4, 4), (4, 8), (5, 1), (6, 1)],
dtype=[('f0', '<i8'), ('f1', '<i8')])
>>> a_b.sort()
>>> a_b
rec.array([(0, 1), (0, 2), (1, 1), (1, 2), (2, 1), (3, 4), (3, 7), (3, 9),
(4, 4), (4, 8), (5, 1), (6, 1)],
dtype=[('f0', '<i8'), ('f1', '<i8')])

关于python - numpy.searchsorted 有多个来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868001/

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