我有一个一维的numpy数组。其中的所有内容应该是10的整数倍。我需要搜索它,并找到我的整数倍数大于10的任何地方,即20,30等。当我找到一个我需要能够识别值发生中断的索引,并将它们用于某些处理。我还需要返回孤立的单个值,并对它们执行不同的操作。例如,
0,10,20,60,80,90,100
从0到20是一组,所以我需要回到0和20并做一些事情,同样80到100是一组,同样应该发生。 60虽然只是它自己的一个值,所以我需要看到它只是一个孤立的单值,并为它做一些单独的处理,然后在80处恢复以获得正确的结果。
试图找出一个合理的方法来做这个与numpy和避风港想出的东西。数据集非常大,因此效率越高越好。从理论上讲,在集合中应该没有重复的价值,并且随着我们向前推进数组,它们应该始终进展。感谢您提前提供任何帮助。
答案 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
做一些不同的事情。