IT

numpy 배열로 보시겠습니까?

lottoking 2020. 9. 13. 10:52
반응형

numpy 배열로 보시겠습니까?


2D numpy배열이 있습니다. 첫 번째 k행과 모든 열을 포함 하는 뷰를 만드는 방법이 있습니까?

요점은 기본 데이터를 복사하지 않는 것입니다 (배열이 너무 커서 부분 복사가 불가능 함).


물론입니다. 어느 쪽처럼 색인을 생성하면됩니다. 예 : y = x[:k, :]원래 배열로보기를 반환합니다. 데이터는 복사되지 않습니다에 대한 모든 업데이트는 y반영되고 반대 x의 경우도 마찬가지입니다.


편집하다 :

나는 일반적으로 uint8의> 10GB 3D 배열로 작업에 대해 많이 걱정합니다. Numpy는 몇 가지 사항을 염두에두면 메모리 관리에 매우 많이 있습니다. 다음은 메모리에 배열 복사를 방지하는 몇 가지 팁입니다.

사용 +=, -=, *=, 등이 배열의 복사를 방지 할 수 있습니다 . x += 10를 들어 배열을 제자리에서 x = x + 10수정하고 복사본을 만들고 수정합니다. (또한 numexpr 살펴 보십시오 )

당신이 복사를 만들고 싶어 경우 x = x + 10, 그 인식 x = x + 10.0의 원인이 x자동으로 이미 아니었다면, 부동 소수점 배열에 최대 캐스트. 그러나 x += 10.0, 여기서 x정수 배열이며, 원인 것 10.0대신으로 배열과 같은 int로 다운 캐스트.

또한 많은 numpy 함수가 out고유 변수 np.abs(x, x)를 사용하여 x제자리에서 절대 값을 취하는 것과 같은 일을 할 수 있습니다 .


두 번째 편집으로, 여기에 가지 더 팁의 개선사본 NumPy와 배열과를 :

대체 목록과 달리 y = x[:]복사본을 반환하지 않고 반환합니다. 복사본을 원하면 (물론 사용중인 메모리 양의 두 배가 됨) 다음을 사용하십시오.y = x.copy()

numpy 배열의 "멋진 인덱싱"에 대해 자주 듣게 될 것입니다. 목록 (또는 정수 배열)을 사용하는 것이 "멋진 인덱싱"입니다. 매우 유용 할 수 있습니다.

예를 들어 : y = x[[0, 1, 2], :]복사본 y = x[:3,:]을 반환하고 뷰를 반환합니다.

정말 미친 인덱싱조차도 x[4:100:5, :-10:-1, None]"일반적인"인덱싱이며 뷰를 반환하는 큰 배열에서 모든 종류의 슬라이싱 트릭을 사용하는 것을 두려워하지 않습니다.

x.astype(<dtype>)데이터 사본을 새 유형으로 x.view(<dtype>)반환하고 뷰를 반환합니다.

그러나 이것에주의하십시오 ... 매우 강력하고 유용하지만 기본 데이터가 메모리에 저장되는 방식을 이해해야합니다. float 배열이 있고이를 int로 보는 경우 (또는 그 반대 경우) numpy는 배열 의 기본 비트 를 int로 해석합니다 .

예를 들어, 1.0리틀 엔디안 시스템에서 64 비트 float 4607182418800017408는 64 비트 int로 볼 때, 배열은 [ 0, 0, 0, 0, 0, 0, 240, 63]uint8로 볼 때입니다. 이 큰 배열에서 예외 비트 트위들 링을 수행해야 할 때 정말 좋습니다. 메모리 버퍼가 해석되는 방식을 낮은 수준으로 제어 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/4370745/view-onto-a-numpy-array

반응형