매우 큰 울퉁불퉁 한 행렬의 평균 (무시한 값)을 얻으려고합니다.500 개의 큰 numpy 행렬의 np.nanmean
X=np.load('my_matrix_1.npy', mmap_mode='r')
을 그리고 난 일부 라인을 읽을 수 있습니다 : 나는 같은 것을, 너무 많은 메모리를 차지하지 않고 그들에로드 할 수 있습니다 알고 있습니다.
for chunk in chunks:
chunk_to_mean = []
for matrix in matrices:
X=np.load(matrix, mmap_mode='r')
chuck_to_mean.append(X)
del X
matrix[chunk] = np.nanmean(chunk_to_mean)
그러나, 그것은 보인다 : 나는이 같은
그래서 뭔가를 각 매트릭스에서 한 번에 읽기 1000 선을 생각하고 유모가 행렬의 크기가 사람의 말은 저장되었다 두 번째로 메모리 할당 오류가 발생합니다. 메모리 매핑을 사용하여 무언가를로드하려고해도 삭제하더라도 마찬가지입니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까, 아니면 어떻게 할 수 있을지 더 잘 알고 있습니까?
개체를 삭제하지 않고 메모리 맵을 두 번 이상 만들면 메모리 할당 문제가 발생하므로 del X를 사용해야합니다. 하지만, 내가 말했듯이, 첫 번째 반복 이후 두 번째 반복에서 실패하고 메모리 오류가 발생합니다. 메모리가 부족하기 때문에가 아니라 메모리를 할당 할 수 없기 때문입니다. 그 중 어느 것도 작동하지 않는 이유가 있습니다. –
Ok - 문제에 대한 아이디어가 있다고 생각합니다. 요점은 배열이 배열에 대한 포인터로 취급된다는 것입니다. 따라서 X를 추가 할 때는 파일을 추가하지 않고 파일에 대한 포인터를 추가합니다. 이 문제를 해결하려면 먼저 행렬을 복사하십시오. np로 이것을하는 좋은 방법. 배열이'np.array (orig_pointer)'에있다 -이 호출은 데이터를 복사 할 것이고, 당신은 모든 np. * 기능을 사용할 수 있어야한다. – cleros
'np.array (X)'호출을 참조하십시오. 연결시 X 사본을 만들기 위해 두 번째 버전을 업데이트했습니다. – cleros