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
'IT' 카테고리의 다른 글
JavaScript에서 x, y 좌표를 사용하여 클릭을 시뮬레이션하는 방법은 무엇입니까? (0) | 2020.09.13 |
---|---|
노드 값이 숫자인지 XPath 테스트 (0) | 2020.09.13 |
Sass에서 @include 대 @extend 사용? (0) | 2020.09.12 |
lucene은 문서를 어떻게 설치 색인? (0) | 2020.09.12 |
NuGet의 패키지를 버전 제어에 체크인 하시겠습니까? (0) | 2020.09.12 |