2013-06-14 2 views
2

내 프로젝트는 현재 메모리 효율적인 배열 (bool_, uint8, uint16, uint32)에서만 NumPy를 사용합니다.PyPy와 효율적인 배열

NumPy를 지원하지 않는 PyPy에서 실행하고 싶습니다. (어떤 이유로 든 설치하지 못했습니다)

그래서 궁금합니다. 파이썬에서 숫자 배열을 저장하는 다른 메모리 효율적인 방법이 있습니까? PyPy가 지원하는 것은 무엇입니까? PyPy는 자기 소유의 것을 가지고 있습니까?

참고 : array.array는 테스트에서 NumPy보다 훨씬 많은 메모리를 사용하므로 실행 가능한 솔루션이 아닙니다.

+5

PyPy는 numpypy''와 함께 제공 (AN array.array('I') 주위의 래퍼로서 그 구현 또는 긴 파이썬과 bytearray() 또는 단지 사용하는 비트 마스크 할 수 있도록 압축 된 부울 유형이 없습니다 또한 array.array numpy의 복제품이지만 여전히 기능을 놓친다) – JBernardo

+2

질문해야하는 다른 질문은 왜 pypy를 사용하는 것입니까? 처음에 할 수있는 다른 최적화가 있습니까? 현재 성능 병목 현상은 무엇입니까? – jozzas

+0

JBernardo에 감사드립니다. numpypy는 내 요구에 잘 작동하는 것 같습니다. :) –

답변

2

array.array 메모리 효율적인 배열입니다. 그것은 바이트/단어 등을 함께 포장하기 때문에 전체 배열에 대한 여분의 오버 헤드가 단지 몇 바이트에 불과합니다. NumPy와 적은 메모리를 사용할 수

한 곳은 스파 스 배열을 (그리고 스파 스 배열 구현 중 하나를 사용하는) 당신이 스파 스 배열을 사용하지 않는 경우

때, 당신은 단순히 잘못 측정 한 것입니다.

+1

필요에 따라 C 타입의 배열이나 작은 C 구조의 배열을 선언하고 사용할 수있는 'cffi'도 있습니다. –

+0

메모리를 측정하기 위해 무작위 데이터로 매우 큰 배열을 초기화하고 Python이 사용하던 RAM을 살펴 보았습니다. 이전에 생산에서 array.array를 사용했고 numpy로 변환했을 때 RAM 사용량이 50-70 % 줄었다. 배열은 희소 할 수 있습니다. 주어진 시간에 대략 75 % 정도 비어있을 것입니다. 예상 할 수 있습니다. –

관련 문제