我是一个初学python的用户,试图了解计算机科学,我一直在通过学习我已经熟悉的概念/科目来学习如何使用它,例如计算流体力学和;有限元分析。我获得了机械工程的学位,所以没有太多的CS背景。
我正在研究Lorena Barba在jupyter笔记本查看器上的一个系列,实用数值方法,我正在寻求一些帮助,希望有人熟悉CFD的主题;FEA概述。
如果你点击下面的链接并转到下面的输出行,你会发现我在下面有什么。在定义的函数中操作的这段代码真的很困惑。
不管怎样。如果有人在那里,有任何关于如何解决学习python的建议,HELP
在[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
前两行的目的是保留rho0
,并为历史提供其副本(副本使rho0
中的后续更改不会反映回此处(,并作为计算过程中使用和修改的"工作"变量rho
的初始值。
背景是python列表和数组变量总是引用有问题的对象。通过分配变量,可以生成引用的副本,即对象的地址,而不是对象本身。两个变量都指向相同的内存区域。因此,不使用.copy()
将改变rho0
。
a = [1,2,3]
b = a
b[2] = 5
print a
#>>> [1, 2, 5]
包含结构化数据对象的复合对象将需要deepcopy
来复制所有级别上的数据。
- Numpy数组值在未被执行的情况下发生了更改
- 如何将列表作为值而非引用传递