2011-03-01 2 views

답변

1

게시물에 약간의 불일치가 있습니다. 나는 당신의 제목이 당신이 원하는 것을 설명한다고 가정합니다. 파이썬 API 문서를 살펴보면, PyArray_NewFromDescr은 사전 할당 된 메모리에 대한 포인터 하나만 허용하므로 거의 확실한 대답은 아닙니다. 은이를 달성하기 위해 영리한 방법으로 strides 인수를 사용할 수 있습니다. 그러나 그렇더라도 비 인접 메모리는 규칙적인 방식으로 배치되어야합니다.

numpy가 사용자가 원하는 바가 아니며, PyArray_CheckStrides으로 판단하면 인접한 메모리 블록이 하나만있는 것으로 간주됩니다.

1

짧은 대답, 아니오.

Numpy는 모든 데이터가 단순한 스트라이드 패턴으로 놓이기를 기대합니다. 배열을 반복 할 때 차원에서 전진하기 위해 메모리의 위치에 해당 차원의 보폭 크기 인 상수를 추가합니다. 따라서 2 차원 슬라이스가 규칙적으로 배치되지 않으면 (예 : 큰 3 차원 배열의 다른 모든 행) numpy는 데이터를 복사해야합니다.

주문하신 경우 원하는 것을 할 수 있습니다. 데이터가 첫 번째 항목을 가리키고 스트라이드가 레이아웃에 적합하며 descr이 올바른 경우 PyArray 구조체를 만들어야합니다. 가장 중요한 것은이 뷰가 존재하는 동안 메모리의 큰 부분을 유지하기 위해 기본 멤버를 다른 파이썬 개체로 설정하려고하는 것입니다.