我对Python还是个新手,所以我在做一个项目,其中一部分包括一个Map的扩散,我通过遍历并使当前瓦片等于.2 * 它的邻居n,w,s,e之和来实现它,如果我用C来做这个,我只需要做一个double for循环,循环遍历一个数组,执行arr[i*width + j] = arr of j+1,j-1,i+i,i-1表示邻居),并有几个不同的数组,我会对它们做同样的事情(我会改变Map的不同性质)。然而,我不确定这是否是Python中最快的方法。我问过一些人,他们建议使用numPy,但是宽度大概不会超过200(最大40- 50 k元素),我不确定是否值得这样做。我真的不知道任何内置函数来做我想要的。有什么建议吗?
编辑:这将是非常密集的,即每个点都将有一个重要的计算
3条答案
按热度按时间fruv7luv1#
这对于NumPy来说是非常简单的,函数np.roll返回数组的一个副本,在指定的方向上“滚动”。
例如,给定数组
x
,您可以使用将列向右滚动
使用np.roll,边界像在圆环上一样被包裹。如果你不想包裹边界,你可以用零的边填充数组,并在每次迭代之前将边重置为零。
myzjeezk2#
使用卷积。
这是蚂蚁的挑战吗?如果是的话,在蚂蚁的上下文中,convolve2d比我的实现中的循环快20倍。
vulvrdjw3#
对unutbu代码的修改使数组的全局和保持不变,同时扩散数组的值: