【发布时间】:2022-02-04 00:13:24
【问题描述】:
我的 python 代码中有一个 while 循环,其中包含一个嵌套的 for 循环,该循环遍历二维数组。
变量T 需要在while 循环结束时更新。
但是,我看到该变量在 for 循环本身内得到更新。
我在这里做错了什么以及如何修改它?
error = 1
tolerance = 1e-6
T = T_new
itr = 0
while error>tolerance:
itr = itr+1
for i in range(1,imax-1):
for j in range(1,jmax-1):
T_new[i,j]=0.25*(T[i-1,j]+T[i+1,j]+T[i,j-1]+T[i,j+1])
error = np.max(np.abs(T_new-T))
T = T_new
【问题讨论】:
-
T = T_new不会复制T_New,如果您是这样想的话。 -
由于我在while循环中,我想用T计算T_new。然后用T_new更新T并重新计算直到满足条件。
-
这是导致问题的
T(在循环之前)的第一个分配。您需要T_New与T独立,以便在循环的最后一行中(正确)将T替换为T_new之前计算T_new - T。跨度> -
T 和 T_new 是同一个对象的名称。赋值不会复制,它会为一个对象命名。试试
a=[1]; b=a; a[0]=2然后print(b) -
欢迎来到 Stack Overflow。 “然后用 T_new 更新 T” 仔细想想“更新”是什么意思。您大概希望
T成为具有相同值 的不同对象。在 Python 中,=无法做到这一点,无论数据类型是什么。在 Python 中,=使左侧引用 与右侧相同的对象。请参阅链接副本,以及nedbatchelder.com/text/names1.html作为补充阅读。
标签: python for-loop while-loop