gpt4 book ai didi

python - 在 Python 中的二维 map 上有效地进行扩散

转载 作者:行者123 更新时间:2023-11-28 23:03:59 25 4
gpt4 key购买 nike

我是 Python 的新手,所以我正在用它做一个项目。其中一部分包括在 map 上的扩散。我通过遍历并使当前图 block 等于 .2 * 其邻居 n、w、s、e 的总和来实现它。如果我在 C 中这样做,我只会做一个双 for 循环,循环遍历一个数组,执行 arr[i*width + j] = arr of j+1, j-1, i+i, i-1 the邻居)并有几个不同的阵列,我会为它们做同样的事情(我会改变 map 的不同质量)。但是,我不确定这是否真的是 Python 中最快的方法。我问过一些人建议像 numPy 这样的东西,但宽度可能不会超过 ~200(所以最多 40-50k 个元素)而且我不确定开销是否值得。我真的不知道有什么内置函数可以做我想做的事。有什么建议吗?

编辑:这将非常密集,即每个点都将进行非平凡的计算

最佳答案

这很容易用 NumPy 来安排.函数np.roll返回数组的副本,在指定方向“滚动”。

例如,给定数组x

x=np.arange(9).reshape(3,3)
# array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])

您可以将列向右滚动

np.roll(x,shift=1,axis=1)
# array([[2, 0, 1],
# [5, 3, 4],
# [8, 6, 7]])

使用 np.roll,边界像环面一样包裹起来。如果您不想要环绕边界,您可以用零边填充数组,并在每次迭代之前将边重置为零。

import numpy as np

def diffusion(arr):
while True:
arr+=0.2*np.roll(arr,shift=1,axis=1) # right
arr+=0.2*np.roll(arr,shift=-1,axis=1) # left
arr+=0.2*np.roll(arr,shift=1,axis=0) # down
arr+=0.2*np.roll(arr,shift=-1,axis=0) # up
yield arr

N=5
initial=np.random.random((N,N))
for state in diffusion(initial):
print(state)
raw_input()

关于python - 在 Python 中的二维 map 上有效地进行扩散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com