[PYTHON] numpy 배열에서 특정 요소를 제거하는 방법
PYTHONnumpy 배열에서 특정 요소를 제거하는 방법
어떻게 numpy 배열에서 특정 요소를 제거 할 수 있습니까? 내가 가진 말
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9])
그런 다음 a에서 3,4,7을 제거하고 싶습니다. 내가 아는 것은 값의 인덱스입니다 (index = [2,3,6]).
해결법
-
==============================
1.numpy.delete () 사용 - 삭제 된 축을 따라 하위 배열이있는 새 배열을 반환합니다.
numpy.delete () 사용 - 삭제 된 축을 따라 하위 배열이있는 새 배열을 반환합니다.
numpy.delete(a, index)
귀하의 특정 질문 :
import numpy as np a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) index = [2, 3, 6] new_a = np.delete(a, index) print(new_a) #Prints `[1, 2, 5, 6, 8, 9]`
numpy.delete ()는 배열 스칼라가 파이썬의 문자열과 같이 불변이므로 새로운 배열을 반환하므로 변경 될 때마다 새로운 객체가 만들어집니다. 즉, delete () 문서를 인용하십시오.
내가 게시 한 코드가 출력되면 코드를 실행 한 결과입니다.
-
==============================
2.거기에 도움이 numpy 내장 기능이 있습니다.
거기에 도움이 numpy 내장 기능이 있습니다.
import numpy as np >>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = np.array([3,4,7]) >>> c = np.setdiff1d(a,b) >>> c array([1, 2, 5, 6, 8, 9])
-
==============================
3.Numpy 배열은 변경할 수 없으므로 기술적으로 항목을 삭제할 수 없습니다. 그러나 다음과 같이 원하지 않는 값을 사용하지 않고 새 배열을 만들 수 있습니다.
Numpy 배열은 변경할 수 없으므로 기술적으로 항목을 삭제할 수 없습니다. 그러나 다음과 같이 원하지 않는 값을 사용하지 않고 새 배열을 만들 수 있습니다.
b = np.delete(a, [2,3,6])
-
==============================
4.나는 멍청한 사람이 아니기 때문에 다음과 같이 촬영했다.
나는 멍청한 사람이 아니기 때문에 다음과 같이 촬영했다.
>>> import numpy as np >>> import itertools >>> >>> a = np.array([1,2,3,4,5,6,7,8,9]) >>> index=[2,3,6] >>> a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))]))) >>> a array([1, 2, 5, 6, 8, 9])
내 테스트에 따르면, 이것은 numpy.delete ()를 능가합니다. 그 이유는 어쩌면 어쩌면 초기 배열의 작은 크기 때문인지 모르겠습니다.
python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))" 100000 loops, best of 3: 12.9 usec per loop python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)" 10000 loops, best of 3: 108 usec per loop
그것은 꽤 중요한 차이점입니다 (내가 예상했던 것과 반대 방향으로), 왜 이것이 그럴까요?
이상하게도 numpy.delete ()를 전달하면 목록을 반복하면서 단일 인덱스를 제공하는 것보다 성능이 떨어집니다.
python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "for i in index:" " np.delete(a, i)" 10000 loops, best of 3: 33.8 usec per loop
편집 : 그것은 배열의 크기와 관련이있는 것으로 보입니다. 대형 배열에서는 numpy.delete ()가 훨씬 빠릅니다.
python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))" 10 loops, best of 3: 200 msec per loop python -m timeit -s "import numpy as np" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "np.delete(a, index)" 1000 loops, best of 3: 1.68 msec per loop
분명히, 이것은 당신이 항상 명료성을 위해 가고 휠을 재발 명하는 것을 피하기 위해 가야하지만, 나는 약간 흥미로운 것을 발견 했으므로 꽤 무의미하다. 그래서 나는 그것을 여기에 남겨 둘 것이라고 생각했다.
-
==============================
5.색인을 모르면 logical_and를 사용할 수 없습니다.
색인을 모르면 logical_and를 사용할 수 없습니다.
x = 10*np.random.randn(1,100) low = 5 high = 27 x[0,np.logical_and(x[0,:]>low,x[0,:]<high)]
from https://stackoverflow.com/questions/10996140/how-to-remove-specific-elements-in-a-numpy-array by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] MAPI를 통해 Python으로 Outlook에서 전자 메일 읽기 (0) | 2018.10.10 |
---|---|
[PYTHON] Pythons timeit으로 성능을 테스트하기 위해 코드 세그먼트를 어떻게 시간을 잴 수 있습니까? (0) | 2018.10.10 |
[PYTHON] Word 2007 .docx 파일에서 단어를 검색하려면 어떻게해야합니까? (0) | 2018.10.10 |
[PYTHON] matplotlib에서 subplots 사이의 간격을 제거하는 방법? (0) | 2018.10.10 |
[PYTHON] 최대 재시도 횟수가 URL 초과했습니다. (0) | 2018.10.10 |