【问题标题】:how do I check that two slices of numpy arrays are the same (or overlapping)?如何检查两片 numpy 数组是否相同(或重叠)?
【发布时间】:2012-05-31 15:25:23
【问题描述】:

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

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

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

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

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

另外,假设abx 的切片,cb 的切片。由于基础数据相同,我还想检测ca 之间的重叠。似乎我应该能够摆脱仅比较缓冲区和形状...如果有人能告诉我确切的方法,我将不胜感激。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    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】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2019-09-04
      • 1970-01-01
      • 2019-07-14
      • 2021-11-15
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多