2012-05-25 2 views
7

두 개의 ndarrays가 동일한 기본 ndarray의 뷰를 오버랩하는지 확인하고 싶습니다.numpy 배열의 두 조각이 동일하거나 겹치는 지 확인하려면 어떻게합니까?

내가 좋아하는 뭔가를 할 수있는, 두 조각은 정확히 동일한 지 확인하려면 버퍼의 비교가 간단한 경우 일 것 같았다

a.base is b.base and a.shape == b.shape and a.data == b.data 

를 - 그것은 일반적으로 작동하는 경우 사람이 말해 줄 수?

안타깝게도이 방법은 슬라이스가 겹치는 작업이 아니며 버퍼에서 추출한 데이터를 기초 데이터에 정확히 추출하는 방법을 찾지 못했을 것입니다.

또한 abx 슬라이스 말하는 및 cb의 조각이다. 기본 데이터가 동일하므로 ca 사이의 겹침도 감지하고 싶습니다. 내가 버퍼와 ​​모양을 비교하는 것으로 벗어날 수 있어야한다고 생각합니다. 누군가가 정확히 어떻게 말해 줄 수 있다면, 나는 감사 할 것입니다.

답변

9

numpy.may_share_memory()은 현재 우리가 가지고있는 최고의 휴리스틱 스입니다. 보수적으로 발견 적이다. 그것은 당신에게 거짓 긍정을 줄지 만, 그것이 당신에게 거짓 부정을주지 않을 것입니다. 휴리스틱을 100 % 정확하도록 개선 할 수있는 방법이있을 것이라고 생각합니다. 팬이 밖으로 빠져 나올 경우, 그 기능으로 접혀서 앞으로 나아갈 수있는 최선의 방법입니다.

+0

어떤 종류의 사례가 실패 할 것으로 예상합니까? 거짓 긍정을 생성하는 비 - 단일 단계로 비틀 거리는 조각이라면, 나는 그걸로 살 수 있습니다 .... – shaunc

+2

'x [0 :: 2]'/'x [1 :: 2]'. 'x [:, 0 : 5]','x [:, 5:10]'. 'x = np.dstack (* args); np.may_share_memory (x [0], x [1])'. –

1

배열의 ctypes 속성을 사용하여 인덱스가 메모리에있는 위치를 비교하는 것이 가능할 수 있습니다. 약간의 작업이 필요할 수 있으므로 문제를 해결할 수있는 다른 방법이 있는지 살펴볼 수 있습니다.

관련 문제