2012-05-25 70 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屬性比較索引在內存中的位置。這可能需要一些工作,所以你可能想退一步,看看是否有不同的方式來解決你的問題。