10

我想检查两个 ndarray 是否是相同底层 ndarray 的重叠视图。

要检查两个切片是否完全相同,我可以执行以下操作:

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

缓冲区的比较似乎在一种简单的情况下有效——谁能告诉我它是否普遍有效?

不幸的是,这不适用于重叠切片,而且我还没有弄清楚如何从缓冲区中准确提取其在基础数据中的偏移量——也许有人可以帮助我解决这个问题?

另外,说aandb是 的切片x,并且c是 的切片b。由于基础数据相同,我还想检测 和 之间的c重叠a。似乎我应该能够只比较缓冲区和形状......如果有人能告诉我确切的方法,我将不胜感激。

4

2 回答 2

11

numpy.may_share_memory()是我们目前拥有的最好的启发式方法。它是保守的启发式的;它可能会给您带来误报,但不会给您带来误报。我认为可能有办法将启发式方法改进为 100% 正确。如果他们成功了,他们将被折叠到那个功能中,所以这是最好的前进方式。

于 2012-05-25T10:17:09.393 回答
1

可以使用ctypes数组的属性来比较索引在内存中的位置。这可能需要一些工作,所以您可能想退后一步,看看是否有不同的方法来解决您的问题。

于 2012-05-25T06:48:01.140 回答