[PYTHON] 파이썬과 numpy로 큰 데이터로 작업하는 것, 램이 충분하지 않은 것, 부분 결과를 디스크에 저장하는 방법?
PYTHON파이썬과 numpy로 큰 데이터로 작업하는 것, 램이 충분하지 않은 것, 부분 결과를 디스크에 저장하는 방법?
파이썬에서 200k + datapoints를 가진 1000 차원 데이터를위한 알고리즘을 구현하려고합니다. 나는 numpy, scipy, sklearn, networkx 및 다른 유용한 라이브러리를 사용하고 싶다. 모든 점 사이의 쌍 거리와 같은 연산을 수행하고 모든 점에 대해 클러스터링을 수행하려고합니다. 합리적인 복잡성으로 원하는 작업을 수행하는 작업 알고리즘을 구현했지만 모든 데이터를 크기 조정하려고 시도 할 때 RAM이 부족합니다. 물론 200k + 데이터에서 pairwise distance에 대한 행렬을 만드는 것은 많은 메모리를 필요로합니다.
캐치가 생깁니다. 저도 컴퓨터가 너무 작고 양이 적은 컴퓨터에서이 작업을 수행하고 싶습니다.
낮은 숫양의 제약없이이 작업을 할 수있는 가능한 방법이 있습니까? time reqs가 무한대로 가지 않는 한 그것은 훨씬 더 오래 걸릴 것입니다.
내 알고리즘을 작동시키고 다시 1 시간에서 5 시간 후에 다시 돌아올 수 있고 RAM이 없어 졌기 때문에 멈추지 않을 수 있기를 원합니다! 나는 이것을 파이썬으로 구현하고 싶다. numpy, scipy, sklearn, networkx 라이브러리를 사용할 수 있어야한다. 내 모든 포인트 등 pairwise 거리를 계산할 수있게하고 싶습니다.
이것이 가능한가? 그리고 나는 그것에 대해 어떻게 갈 것인가? 내가 읽을 수있는 것은 무엇인가?
친애하는 // Mesmer
해결법
-
==============================
1.numpy.memmap을 사용하면 파일에 직접 매핑 된 배열을 만들 수 있습니다.
numpy.memmap을 사용하면 파일에 직접 매핑 된 배열을 만들 수 있습니다.
import numpy a = numpy.memmap('test.mymemmap', dtype='float32', mode='w+', shape=(200000,1000)) # here you will see a 762MB file created in your working directory
기존 배열로 처리 할 수 있습니다. a + = 1000.
동일한 파일에 더 많은 배열을 할당하여 필요할 경우 상호 소스에서 제어 할 수도 있습니다. 하지만 여기서 약간의 까다로운 일들을 경험했습니다. 전체 배열을 열려면 먼저 del을 사용하여 이전 배열을 "닫아야"합니다.
del a b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(200000,1000))
그러나 배열의 일부만 개방하면 동시 제어를 수행 할 수 있습니다.
b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(2,1000)) b[1,5] = 123456. print a[1,5] #123456.0
큰! a가 b와 함께 변경되었습니다. 그리고 변경 사항은 이미 디스크에 기록되어 있습니다.
논평 할 가치가있는 또 다른 중요한 것은 상쇄이다. b에서 처음 2 줄을 사용하지 않고 150000과 150001 줄을 사용한다고 가정하십시오.
b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(2,1000), offset=150000*1000*32/8) b[1,2] = 999999. print a[150001,2] #999999.0
이제 동시 작업에서 어레이의 모든 부분에 액세스하고 업데이트 할 수 있습니다. 오프셋 계산에 들어가는 바이트 크기에 주목하십시오. 따라서 'float64'의 경우이 예제는 150000 * 1000 * 64 / 8이됩니다.
기타 참고 문헌 :
-
==============================
2.OS에서 가상 메모리를 늘리고 64 비트 Python을 사용하면 64 비트 OS를 제공 할 수 있습니다.
OS에서 가상 메모리를 늘리고 64 비트 Python을 사용하면 64 비트 OS를 제공 할 수 있습니다.
from https://stackoverflow.com/questions/16149803/working-with-big-data-in-python-and-numpy-not-enough-ram-how-to-save-partial-r by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 "global"문을 사용합니까? [닫은] (0) | 2018.10.11 |
---|---|
[PYTHON] 주어진 파일을 포함하는 파일 시스템의 크기와 여유 공간을 찾습니다. (0) | 2018.10.11 |
[PYTHON] 일정 시간 후에 스레드를 중지하는 중 (0) | 2018.10.11 |
[PYTHON] Win32 API를 파이썬과 함께 사용하는 방법? (0) | 2018.10.11 |
[PYTHON] 항목의 길이가 다른 사전에서 데이터 프레임 만들기 (0) | 2018.10.11 |