【发布时间】:2021-07-28 07:00:40
【问题描述】:
这个问题与this question 非常相似,但我不确定如何将答案应用于 2D 或 3D 数组。
举个简单的例子,使用以下形状为 (5,5) 的二维数组:
In [158]: a
Out[158]:
array([[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]])
我想获取边缘的索引。对于这种情况:
(array([1, 1, 1, 2, 2, 3, 3, 3]), array([1, 2, 3, 1, 3, 1, 2, 3]))
现在我在两个方向/轴上移动数组,与原始数组进行比较并识别具有不同值的单元格:
In [230]: np.nonzero(a!= np.roll(a,shift=(1,1),axis=(0,1)))
Out[230]: (array([1, 1, 1, 2, 2, 3, 3, 4, 4, 4]), array([1, 2, 3, 1, 4, 1, 4, 2, 3, 4]))
有些索引是正确的,但有些则不是。我想由于我应用的转变,4s 应该变成 3s,但我不确定如何纠正这个问题,因为我计划将它应用于更复杂(和更大)的掩码数组。我的最终目标是将其应用于 3D 数组。
我正在使用 Python 3.7.1
【问题讨论】: