서로 뒤 따르는 중복을 제거하고 싶지만 전체 배열과 중복되지는 않습니다. 또한 주문을 변경하지 않고 유지하고 싶습니다. 입력이 [0 0 1 3 2 2 3 3]
경우numpy 배열에서 다음 중복 제거
그래서 출력은 내가 itertools.groupby()
를 사용하는 방법을 발견 [0 1 3 2 3]
해야하지만 빠른 numpy
솔루션을 찾고 있어요. NumPy와 배열을 사용하여 순수 파이썬 느릅 나무에 대한
서로 뒤 따르는 중복을 제거하고 싶지만 전체 배열과 중복되지는 않습니다. 또한 주문을 변경하지 않고 유지하고 싶습니다. 입력이 [0 0 1 3 2 2 3 3]
경우numpy 배열에서 다음 중복 제거
그래서 출력은 내가 itertools.groupby()
를 사용하는 방법을 발견 [0 1 3 2 3]
해야하지만 빠른 numpy
솔루션을 찾고 있어요. NumPy와 배열을 사용하여 순수 파이썬 느릅 나무에 대한
a[np.insert(np.diff(a).astype(np.bool),0,True)]
Out[99]: array([0, 1, 3, 2, 3])
일반적인 생각은 diff
을 사용하여 배열의 두 연속 요소 간의 차이를 찾는 것입니다. 그렇다면 non-zero
개의 요소를 색인하는 색인 만 만듭니다. 그러나 diff
의 길이는 1 깁니다. 색인을 생성하기 전에 diff 배열의 시작 부분에 insert
True
이 필요합니다.
설명 :
In [100]: a
Out[100]: array([0, 0, 1, 3, 2, 2, 3, 3])
In [101]: diff = np.diff(a).astype(np.bool)
In [102]: diff
Out[102]: array([False, True, True, True, False, True, False], dtype=bool)
In [103]: idx = np.insert(diff, 0, True)
In [104]: idx
Out[104]: array([ True, False, True, True, True, False, True, False], dtype=bool)
In [105]: a[idx]
Out[105]: array([0, 1, 3, 2, 3])
도 작동이 :
def modify(l):
last = None
for e in l:
if e != last:
yield e
last = e
pure = modify([0, 0, 1, 3, 2, 2, 3, 3])
import numpy
num = numpy.array(modify(numpy.array([0, 0, 1, 3, 2, 2, 3, 3])))
어떤 NumPy와 기능이 속도를 높일 것 느릅 나무가 있는지 모르겠어요.