我是一名初学python用户,他试图了解计算机科学,我一直在学习如何使用它来研究我已经熟悉的概念/科目,例如计算流体力学和有限元分析 . 我获得了机械工程学位,所以CS背景不多 .
我正在研究Lorena Barba关于jupyter笔记本查看器,实用数值方法的系列文章,我正在寻求一些帮助,希望有人熟悉CFD和FEA的主题 .
如果你点击下面的链接并转到下面的输出行,你会发现我在下面的内容 . 对在定义的函数内操作的这段代码感到非常困惑 .
无论如何 . 如果有人在那里,有任何关于如何解决学习python的建议,请帮助
[9]中
rho_hist = [rho0.copy()]
rho = rho0.copy() **# im confused by the role of this variable here**
for n in range(nt):
# Compute the flux.
F = flux(rho, *args)
# Advance in time using Lax-Friedrichs scheme.
rho[1:-1] = (0.5 * (rho[:-2] + rho[2:]) -
dt / (2.0 * dx) * (F[2:] - F[:-2]))
# Set the value at the first location.
rho[0] = bc_values[0]
# Set the value at the last location.
rho[-1] = bc_values[1]
# Record the time-step solution.
rho_hist.append(rho.copy())
return rho_hist
1 回答
前两行的目的是保留
rho0
并为历史记录提供它的副本(复制以便rho0
中的后续更改不会反映在此处)以及作为在此期间使用和修改的"working"变量rho
的初始值 . 计算 .背景是python列表和数组变量始终是对相关对象的引用 . 通过分配变量,您可以生成引用的副本,对象的地址,而不是对象本身 . 两个变量都指向相同的内存区域 . 因此,不使用
.copy()
将更改rho0
.本身包含结构化数据对象的复合对象需要
deepcopy
来复制所有级别的数据 .Numpy array values changed without being aksed?
how to pass a list as value and not as reference?