Reputation: 5611
I would like to check if two ndarrays are overlapping views of the same underlying ndarray.
To check that two slices are exactly the same, I can do something like:
a.base is b.base and a.shape == b.shape and a.data == b.data
The comparison of buffers seemed to work in one simple case -- can anyone tell me if it works in general?
Unfortunately, this wont work for overlapping slices, and I haven't figured out how to extract from the buffer exactly what its offset is in the underlying data -- perhaps someone can help me with this?
Also, say a
and b
are slices of x
, and c
is a slice of b
. As the underlying data is the same, I would also like to detect overlaps between c
and a
. It would seem that I should be able to get away with comparing just buffer and shape... if anyone could tell me exactly how, I would be grateful.
Upvotes: 10
Views: 2395
Reputation: 13430
numpy.may_share_memory()
is the best heuristic that we have at the moment. It is conservatively heuristic; it may give you false positives, but it will not give you false negatives. I think there might be ways to improve the heuristic to be 100% correct. If they pan out, they will be folded into that function, so that's the best way forward.
Upvotes: 11