Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python Numpy跟踪所有0';爆炸性蔓延 问题:_Python 3.x_Pandas_Numpy - Fatal编程技术网

Python 3.x Python Numpy跟踪所有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],

我有一个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],
[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个零。你能检查一下吗?或者添加另一个包含多个零的示例?当然,让我试一试。:)