Python 用于散热的 numpy 矢量化

Python numpy vectorization for heat dispersion

我应该使用下面给出的有限差分公式编写一个代码来表示热扩散。

()=((−1)[+1,] + (−1) [−1,] +(−1)[,+1] + (−1)[,−1])/4 该公式应该只产生时间步长为 1 的结果。因此,如果给出这样的数组:

100   100   100   100   100  
100    0     0     0    100  
100    0     0     0    100  
100    0     0     0    100  
100   100   100   100   100

时间步长 1 的结果数组为:

100   100   100   100   100  
100    50    25    50   100   
100    25     0    25   100  
100    50    25    50   100  
100   100   100   100   100

我知道使用 for 循环的表示如下,其中数组至少有 2 行和 2 列作为前提条件:

h = np.copy(u)
for i in range(1,h.shape[0]-1):
    for j in range (1, h.shape[1]-1):
        num = u[i+1][j] + u[i-1][j] + u[i][j+1] + u[i][j-1]
        h[i][j] = num/4

但我不知道如何矢量化代码来表示散热。我应该使用 numpy 数组和矢量化,不允许使用任何类型的 for 循环,我想我应该依赖切片,但我不知道如何写出来并开始使用。

r, c = h.shape
if(c==2 or r==2):
    return h

我敢肯定,如果行数=2 或列数=2,则数组将按原样返回,但如果我错了,请纠正我。任何帮助将不胜感激。谢谢!

尝试:

h[1:-1,1:-1] = (h[2:,1:-1] + h[:-2,1:-1] + h[1:-1,2:] + h[1:-1,:-2]) / 4

此解决方案使用切片,其中:

  • 1:-1 保留索引 1,2, ..., LAST - 1
  • 2: 停留 2, 3, ..., LAST
  • :-2 停留 0, 1, ..., LAST - 2

在每次迭代期间,仅更新内部元素(索引 1..LAST-1)