我正在尝试将下面的代码向量化,但是我不知道如何开始。问题是编写给定numpy数组的代码。 2D数组包含表示正面轮廓上钢温度的元素。如果热夹作用在钢上,则元件的外圈代表温度。它们保持不变,但是内部元素/温度将在t秒后改变。目的是在1的时间步返回数组。等式描述了t秒后元素将发生什么。
()=((−1)[+1,] + (−1) [−1,] +(−1)[,+1] + (−1)[,−1])/ 4
方括号包含元素的位置。一切都是有帮助的。谢谢!
#u is the numpy array
arr = np.copy(u)
for i in range(len(u)):
for j in range(len(u[i])):
if i == 0 or i == (len(u) - 1) or j == 0 or j == (len(u[i]) - 1):
continue
else:
arr[i][j] = (u[i + 1][j] + u[i - 1][j] + u[i][j + 1] + u[i][j - 1]) / 4
return arr
例如: 例如,数组:
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
上面的数组返回数组:
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
经过1个时间步长
答案 0 :(得分:0)
您将关闭,以更改numpy数组numpy indexing的元素以进行赋值。仅此一项就可以解决您的问题。 (使用arr[i, j] =
代替arr[i][j] =
)
我对您的代码的另一种评论是使用range function。通过限制数组的索引而不是检查其不允许的索引,可以简化并提高可读性。看看我的例子:
def timestep(arr):
rval = np.copy(arr)
for row in range(1, arr.shape[0] - 1): # arr.shape returns (width, height)
for col in range(1, arr.shape[1] - 1):
rval[row, col] = (arr[row-1, col] + arr[row+1, col] + arr[row, col-1] + arr[row, col+1]) / 4
return rval
print(arr)
print(timestep(arr))
此输出
[[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]]
[[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]]
以您的示例为例。