在numpy数组中搜索变体

时间:2018-05-10 00:24:40

标签: python arrays sorting numpy

我有一个一维的numpy数组。其中的所有内容应该是10的整数倍。我需要搜索它,并找到我的整数倍数大于10的任何地方,即20,30等。当我找到一个我需要能够识别值发生中断的索引,并将它们用于某些处理。我还需要返回孤立的单个值,并对它们执行不同的操作。例如,

0,10,20,60,80,90,100

从0到20是一组,所以我需要回到0和20并做一些事情,同样80到100是一组,同样应该发生。 60虽然只是它自己的一个值,所以我需要看到它只是一个孤立的单值,并为它做一些单独的处理,然后在80处恢复以获得正确的结果。

试图找出一个合理的方法来做这个与numpy和避风港想出的东西。数据集非常大,因此效率越高越好。从理论上讲,在集合中应该没有重复的价值,并且随着我们向前推进数组,它们应该始终进展。感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您当然可以将值分组到所需的集合中。有几种方法可以做到这一点,例如:关闭:

import itertools as it

def gn(init=0):
    _x = init
    _count = 0
    def fn(x):
        nonlocal _count, _x
        _count += x - _x > 10
        _x = x
        return _count
    return fn

In []:
x = [0, 10, 20, 60, 80, 90, 100]
[list(g) for k, g in it.groupby(x, gn())]

Out[]:
[[0, 10, 20], [60], [80, 90, 100]]

或者类似于:

class G:
    def __init__(self, init=0):
        self._x = init
        self._count = 0
    def __call__(self, x):
        self._count += x - self._x > 10
        self._x = x
        return self._count

In []:
x = [0, 10, 20, 60, 80, 90, 100]
[list(g) for k, g in it.groupby(x, G())]

Out[]:
[[0, 10, 20], [60], [80, 90, 100]]

然后你可以迭代这些组,然后len() == 1做一些不同的事情。