정확히 같은 데이터가 주어지면 일반적으로 어떤 개체가 메모리가 더 작습니다 : dtype int64 또는 int 유형의 C++ 벡터가있는 numpy 배열? - 물체의 오버 헤드를 더한 형상 진보 및 데이터 버퍼와 같은 특성이있다Numpy 배열 대 메모리 효율성의 C++ 벡터
v = np.array([34, 23])
std::vector<int> v { 34,23 };
정확히 같은 데이터가 주어지면 일반적으로 어떤 개체가 메모리가 더 작습니다 : dtype int64 또는 int 유형의 C++ 벡터가있는 numpy 배열? - 물체의 오버 헤드를 더한 형상 진보 및 데이터 버퍼와 같은 특성이있다Numpy 배열 대 메모리 효율성의 C++ 벡터
v = np.array([34, 23])
std::vector<int> v { 34,23 };
효과적으로 2 부 np.array
내지 An : 예. 첫 번째 배열은 모든 배열에 대해 대략 동일한 크기를 가지며 두 번째 스케일은 요소 수 (및 각 요소의 크기)와 동일합니다. numpy
에서 데이터 버퍼는 배열 모양에 관계없이 1d입니다.
예제 요소 배열의 오버 헤드 부분이 데이터 버퍼보다 클 수 있습니다. 하지만 1000 가지 요소를 사용하면 크기 비율이 다른 방향으로 이동합니다.
배열을 np.save
으로 저장하면 메모리 사용에 대한 대략적인 아이디어를 얻을 수 있습니다. 이 파일 형식은 헤더 버퍼 (256 바이트?)를 쓰고 나머지는 데이터 버퍼입니다.
저는 C++ 저장소에 익숙하지 않습니다. 언어가 더 명확하다면 더 투명하다고 생각합니다.
그러나 하나의 배열을 저장할 때의 효율성을 기억하는 것은 이야기의 일부일뿐입니다. 실제로 수학과 색인을 만들 때 메모리 사용에 관해 생각할 필요가 있습니다. ndarray
은 view
과 copy
을 구별하여 얼마나 많은 메모리가 사용되는지 예측하기 어렵게 만듭니다.
In [1155]: np.save('test.npy',np.array([1,2]))
In [1156]: ls -l test.npy
-rw-rw-r-- 1 paul paul 88 Jun 30 17:08 test.npy
In [1157]: np.save('test.npy',np.arange(1000))
In [1158]: ls -l test.npy
-rw-rw-r-- 1 paul paul 4080 Jun 30 17:08 test.npy
이것은 80 바이트의 헤더와 4 * len 바이트의 데이터입니다.
실제로 상대적 개념이라는 효율성에 대한 요점이 여기에 핵심입니다. 'std :: vector
나는 C++ 벡터 - numpy 배열이 (C 타입에 비해 꽤 큰 파이썬 타입으로서) 더 많은 메타 데이터를 가지고 다니기 쉽다고 생각한다. 당신이 배열을 많이 사용하지 않는다면 메모리 사용량의 차이는 작을 것입니다. – mgilson
다른 언어에서 이러한 데이터 형식 중 하나를 사용해야하는 오버 헤드를 잊지 마십시오. – user2357112
내가 알고있는 대부분의 최신 C++ 구현에서 'int'는 32 비트입니다. 64 비트 타입을 원하면'std :: int64_t'를 사용하십시오. –