Python 3.x Python Numpy跟踪所有0';爆炸性蔓延 问题:
我有一个PythonNumpy数组列表,它是RxC维度,包含所有1,只有一个地方是0 假设我们现在有3x4。我必须从0点开始追踪它的邻近区域,才能看到它的爆炸性扩散 检查上下文的视觉表示的输入 它与连锁反应传播有关,但我无法用2D阵列来追踪它 零的数量可以是'N',如何将其周围的所有位置也标记为0 我尝试的是: 我试着做了一些数学计算,但这个公式只适用于一个地方Python 3.x Python Numpy跟踪所有0';爆炸性蔓延 问题:,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,我有一个PythonNumpy数组列表,它是RxC维度,包含所有1,只有一个地方是0 假设我们现在有3x4。我必须从0点开始追踪它的邻近区域,才能看到它的爆炸性扩散 检查上下文的视觉表示的输入 它与连锁反应传播有关,但我无法用2D阵列来追踪它 零的数量可以是'N',如何将其周围的所有位置也标记为0 我尝试的是: 我试着做了一些数学计算,但这个公式只适用于一个地方 0-位置3,3 尺寸-3x4 3-3,4-3=1次迭代。但这是错误的 输入: 启动: [ [1,1,1,1], [1,1,1,1],
0
-位置3,3
尺寸-3x4
3-3,4-3=1次迭代。但这是错误的
输入:
启动:
[
[1,1,1,1],
[1,1,1,1],
[1,1,0,1],
[1,1,1,1]
]
[
[1,1,1,1],
[1,0,0,0],
[1,0,0,0],
[1,0,0,0]
]
[
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
迭代1:
[
[1,1,1,1],
[1,1,1,1],
[1,1,0,1],
[1,1,1,1]
]
[
[1,1,1,1],
[1,0,0,0],
[1,0,0,0],
[1,0,0,0]
]
[
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
迭代2:
[
[1,1,1,1],
[1,1,1,1],
[1,1,0,1],
[1,1,1,1]
]
[
[1,1,1,1],
[1,0,0,0],
[1,0,0,0],
[1,0,0,0]
]
[
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
输出:
链式反应扩散需要2次迭代才能完成。IIUC,使用
scipy.ndimage.distance\u transform\u cdt
:
from scipy.ndimage import distance_transform_cdt
arr = np.ones((4, 4))
arr[2,2] = 0
distance_transform_cdt(arr)
输出:
array([[2, 2, 2, 2],
[2, 1, 1, 1],
[2, 1, 0, 1],
[2, 1, 1, 1]])
您可以将其最大化以获得n
distance_transform_cdt(arr).max()
# 2
使用2个零进行测试:
arr2 = np.ones((5, 5))
arr2[2,3] = 0
arr2[1,1] = 0
arr2
array([[1., 1., 1., 1., 1.],
[1., 0., 1., 1., 1.],
[1., 1., 1., 0., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
distance_transform_cdt(arr2)
array([[1, 1, 1, 2, 2],
[1, 0, 1, 1, 1],
[1, 1, 1, 0, 1],
[2, 2, 1, 1, 1],
[3, 2, 2, 2, 2]])
这可以用相当简单的方法来完成<代码>O(nxm)<对于每次迭代,如果矩阵[i][j]=0,则将相邻节点设置为0。m不是迭代次数。你在寻找一个优化的解决方案还是什么?我在寻找一个实时解决方案,其中可以有任意数量的0,我们仍然可以计算它所花费的扩展和总迭代次数。你只需要输出(在示例2中),或者迭代次数?正如我在问题中提到的,可能会出现多个0,这个解决方案不能解决这个问题。它就像森林中的火势蔓延一样,当有多个地方起火时会发生什么情况。@高辛烷值我试过用2个零。你能检查一下吗?或者添加另一个包含多个零的示例?当然,让我试一试。:)