如何检查两片numpy数组是否相同(或重叠)?

sha*_*unc 8 python numpy

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

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

a.base is b.base and a.shape == b.shape and a.data == b.data
Run Code Online (Sandbox Code Playgroud)

缓冲区的比较似乎只在一个简单的情况下工作 - 任何人都可以告诉我它是否有效吗?

不幸的是,这不适用于重叠切片,我还没有弄清楚如何从缓冲区中提取其底层数据中的偏移量 - 也许有人可以帮我解决这个问题?

而且,说ab是切片x,并且c是切片b.由于基础数据相同,我还想检测c和之间的重叠a.看起来我应该能够通过比较缓冲和形状......如果有人能告诉我具体如何,我将不胜感激.

Rob*_*ern 10

numpy.may_share_memory()是我们目前最好的启发式方法.这是保守的启发式; 它可能会给你误报,但它不会给你假阴性.我认为可能有办法将启发式改进为100%正确.如果它们成功,它们将被折叠成该功能,这是最好的前进方式.

  • `x[0::2]`/`x[1::2]`。`x[:, 0:5]`、`x[:, 5:10]`。`x = np.dstack(*args); np.may_share_memory(x[0], x[1])`。 (2认同)