2013-07-23 3 views
1
import numpy 
from scipy.spatial.distance import pdist 
X = numpy.zeros(50000,25) 
C = pdist(X, 'euclidian') 

"어레이가 너무 큽니다"배열이 너무 큽니다.파이썬 NumPy와는 :</p> <p>을 그리고 NumPy와 오류를 제공합니다 : I 찾으려

나는 C의 배열 크기에 관한 문제라고 생각한다. Pdist는 (50000,50000) 배열을 생성 할 수 없다. 나는 왜 numpy가 제한하는지 모른다. MATLAB에서 동일한 코드를 실행할 수 있습니다. 배열을 사용하여이 코드를 어떻게 실행할 수 있습니까?

또한 중복 가능성이 있지만 배열 크기가 너무 큽니다.

Is it possible to create a 1million x 1 million matrix using numpy? Very large matrices using Python and NumPy

+0

당신이 할당하려고 얼마나 많은 메모리 수학을했을 P, 희망이 도움이? –

+0

파이썬과 numpy의 64 비트 버전을 사용하고 있습니까? 50k x 50k 배열은 약 20Gb의 메모리를 사용합니다 (numpy는 기본적으로 double precison 부동 소수점을 사용합니다). – talonmies

답변

1

우선 코드에 오타가 몇있다. 그것은 :

X = numpy.zeros((50000,25)) # it's a tuple going in 
C = pdist(X, 'euclidean') # euclidean with an e 

물론 질문에는 중요하지 않습니다.

유클리드 pdist는 numpy.linalg.norm (http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html)의 호출 일뿐입니다. 이것은 매우 일반적인 기능입니다. 메모리 제약으로 인해 귀하의 케이스에서 작동하지 않는다면, 항상 당신 자신을 창조 할 수 있습니다. 두 50000 길이 벡터는 그 많은 메모리를하지 않으며이 한 쌍으로 비교 할 수 있습니다 :

np.sqrt(np.sum(np.square(X[0])) + np.sum(np.square(X[1]))) 

을 그리고 당신은 모든 일을 반복해야합니다.

관련 문제