큰 숫자 배열로 작업하는 데 어려움을 겪고 있습니다. 다음은 시나리오입니다. 나는 300MB - 950MB 이미지로 작업 중이며 GDAL을 사용하여 Numpy 배열로 읽습니다. 배열에서의 읽기는 정확히 예상 한 것만큼의 메모리를 사용합니다. 250MB 이미지의 경우 250MB ...Numpy.mean, amin, amax, std huge returns가
numpy를 사용하여 평균, 최소, 최대 또는 표준 편차를 구할 때 문제가 발생합니다. main()에서 이미지를 열고 배열 (ndarray 유형)을 읽습니다. 그때 나는 2 차원 배열에, 표준 편차를 얻기 위해, 다음과 같은 함수를 호출 :
(A 기가 바이트 기계에) 저는 여기에 지속적으로 메모리 오류를 데def get_array_std(input_array):
array_standard_deviation = numpy.std(input_array, copy=False)
return array_standard_deviation
. documentation에서 numpy는 내 입력과 동일한 모양 및 dtype을 가진 ndarray를 반환하므로 메모리 크기가 두 배로 증가한 것처럼 보입니다.
사용 :
print type(array_standard_deviation)
결과 :
numpy.float64
을 추가로 사용 :
print array_standard_deviation
하나가 기대하는 것처럼 부동 소수점 표준을 돌려줍니다. 이 계산을 수행하려면 다시 numpy가 배열을 읽는 중입니까? 내가 배열을 반복하고 수동으로 계산을 수행하는 것이 더 좋을까요? 평평한 배열로 작업하는 것은 어떻습니까?
큰 배열이 범위를 벗어날 수 있도록 각 통계 호출 (numpy.amin(), numpy.amax(), numpy.std(), numpy.mean())을 자체 함수에 배치 해 보았습니다 , 그러나 거기에서 운 없음. 나는 또 다른 타입으로 돌아 가기를 시도했지만 기쁨은 없다.
그냥 input_array.std() 및 운이 변경하려고했습니다. raw_input() 호출을 삽입하고 리소스 모니터를 사용하여 각 호출마다 파이썬 메모리 사용량이 배열 크기만큼 증가했는지 확인할 수 있습니다. input_array를 함수에 전달한 다음 위와 같이 호출합니다. 이 [link] (http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference)는 변수를 올바르게 전달하고 있음을 나타냅니다. – Jzl5325
정말 이상합니다. 함수 호출을 numpy.std() 함수에 대한 직접 호출로 대체 할 수 있습니까? 아니면 numpy.std()를 get_array_std()로 랩핑해야하는 이유가 있습니까? 네가 그럴만한 이유가 있다고 생각해. 당신이 말한 것에 근거하여 변수를 올바르게 전달하고 있다고 생각합니다. 리소스 소비가 증가 할 때 get_array_std()를 호출하는 문맥은 무엇입니까? 최소한의 스크립트로 테스트 해 보셨습니까? – keflavich