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)
我应该使用下面给出的有限差分公式编写一个代码来表示热扩散。
()=((−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 - 12:
停留 2, 3, ..., LAST:-2
停留 0, 1, ..., LAST - 2
在每次迭代期间,仅更新内部元素(索引 1..LAST-1)