2

我是一名 Python 初学者,正在尝试了解计算机科学,我一直在通过学习我已经熟悉的概念/主题来学习如何使用它,例如计算流体力学和有限元分析。我获得了机械工程学位,因此没有多少CS背景。

我正在学习 Lorena Barba 在 jupyter notebook viewer 上的系列,实用数值方法,我正在寻求一些帮助,希望有人熟悉 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

http://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/03_wave/03_02_convectionSchemes.ipynb

4

1 回答 1

2

前两行的目的是为rho0历史保留和提供它的副本(复制以便以后的更改rho0不会在此处反映),并作为rho在计算期间使用和修改的“工作”变量的初始值.

背景是python列表和数组变量始终是对相关对象的引用。通过分配变量,您可以生成引用的副本、对象的地址,而不是对象本身。两个变量都指向同一个内存区域。因此不使用.copy()会改变rho0

a = [1,2,3]
b = a
b[2] = 5
print a
#>>> [1, 2, 5]

本身包含结构化数据对象的复合对象将需要deepcopy复制所有级别的数据。

于 2018-12-09T10:37:46.730 回答