python - 使用 Tensorflow 2 沿 y 轴绘制 2D 视频文件的 1D 图
问题描述
我正在尝试绘制浓度分布图,即X
(每单位体积的粒子数 - 标量)与沿 y 轴的幅度,用于孤子图像形成的二维视频。它用于沿 y 轴(孤子中心或附近)的一维绘图。我在下面打印了一些X
值 ( self.X
)。有人可以就如何做到这一点提供建议吗?
该程序由例如运行:python3 render_video.py ~/tf2-model-g/nucleation_and_motion_in_fluid_2D.mp4 --params params/nucleation_and_motion_in_fluid_2D.yaml
显示在https://github.com/bjdarrer/tf2-model-g/blob/master/README.md
在fluid_model_g.py
--> https://github.com/frostburn/tf2-model-g/blob/master/fluid_model_g.py#L260
第 260 至 271 行:
def step(self):
self.G, self.X, self.Y = self.reaction_integrator(self.G, self.X, self.Y)
density_of_reactants = (
self.params['density_G'] * self.G +
self.params['density_X'] * self.X +
self.params['density_Y'] * self.Y
)
rho = tf.math.log(self.params['base-density'] + density_of_reactants)
if self.dims == 2:
u, v = self.u, self.v # Store unintegrated flow so that we're on the same timestep
self.u, self.v, divergence = self.flow_integrator(rho, self.u, self.v)
self.G, self.X, self.Y = self.diffusion_advection_integrator(self.G, self.X, self.Y, u, v, divergence)
print("Value of X: ", self.X) # ***** BJD inserted this line 13.11.2020 *****
Value of X: tf.Tensor(
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]], shape=(426, 240), dtype=float64)
0% (1 of 960) | | Elapsed Time: 0:00:02 ETA: 0:47:21[swscaler @ 0x50eea00] Warning: data is not aligned! This can lead to a speed loss
Value of X: tf.Tensor(
[[-4.63608184e-24 -4.36049800e-24 -3.96075313e-24 ... -5.27033753e-24
-5.03750622e-24 -4.84189560e-24]
[ 2.76706114e-24 2.59755449e-24 2.45328517e-24 ... 2.86976915e-24
2.95354289e-24 2.90518059e-24]
[-6.71999498e-24 -6.43068214e-24 -6.04211608e-24 ... -7.49891717e-24
-7.20906517e-24 -6.96166453e-24]
...
[-7.49120287e-24 -7.43495675e-24 -7.33722895e-24 ... -7.87227733e-24
-7.66850690e-24 -7.55316064e-24]
[-6.62339916e-24 -7.00430269e-24 -7.22697968e-24 ... -5.13241412e-24
-5.62753357e-24 -6.14297167e-24]
[-2.95495662e-24 -2.83991588e-24 -2.64129974e-24 ... -3.35524379e-24
-3.15960041e-24 -3.04178300e-24]], shape=(426, 240), dtype=float64)
0% (2 of 960) | | Elapsed Time: 0:00:03 ETA: 0:26:36Value of X: tf.Tensor(
[[-9.47390594e-25 8.49165771e-25 1.85097134e-24 ... -9.88883148e-24
-6.58483185e-24 -3.49179228e-24]
[-3.94139524e-24 -1.45189300e-24 4.41879845e-25 ... -1.34799377e-23
-1.02628610e-23 -6.95616006e-24]
[ 8.18336833e-24 9.84605465e-24 1.07562913e-23 ... -2.49403108e-25
2.86674937e-24 5.79328209e-24]
在https://github.com/frostburn/tf2-model-g/blob/master/render_video.py#L33的第 33 到 45 行
def make_video_frame(rgb, indexing='ij'):
if indexing == 'ij':
rgb = [tf.transpose(channel) for channel in rgb]
frame = tf.stack(rgb, axis=-1)
frame = tf.clip_by_value(frame, 0.0, 1.0)
return tf.cast(frame * 255, 'uint8').numpy()
def nucleation_and_motion_in_G_gradient_fluid_2D(writer, args, R=16):
dx = 2*R / args.height
x = (np.arange(args.width) - args.width // 2) * dx
y = (np.arange(args.height) - args.height // 2) * dx
x, y = np.meshgrid(x, y, indexing='ij')
如何访问图像中心X
所有y
值的值,即一维孤子?
解决方案
这是通过包含 numpy 代码解决的:np.savetxt("test.txt", self.X)
将 X 值保存到数组文本文件中,在第二个单位时间内,通过断点逐步执行程序。
请参阅此处的代码:
if self.dims == 2:
u, v = self.u, self.v # Store unintegrated flow so that we're on the same timestep
self.u, self.v, divergence = self.flow_integrator(rho, self.u, self.v)
self.G, self.X, self.Y = self.diffusion_advection_integrator(self.G, self.X, self.Y, u, v, divergence)
print("Value of X: ", self.X) # ***** BJD inserted this line 13.11.2020 *****
np.savetxt("test.txt", self.X) # BJD added 18.11.2020
https://github.com/bjdarrer/tf2-model-g/blob/master/fluid_model_g.py#L272
……………………………………………………………………………………………………………………
一维图由X
第二个时间单位的值组成。请参阅下面的附图和一维值。
[ 7.94994701e-24 9.85394009e-24 1.16724732e-23 1.32964743e-23
1.46426920e-23 1.56451249e-23 1.62247381e-23 1.62714663e-23
1.56643109e-23 1.43263700e-23 1.22840384e-23 9.69274339e-24
6.80830998e-24 3.91114440e-24 1.21418229e-24 -1.20497031e-24
-3.41488779e-24 -5.57379433e-24 -7.82536116e-24 -1.01917593e-23
-1.25153317e-23 -1.44811319e-23 -1.57152112e-23 -1.59172105e-23
-1.49702335e-23 -1.29833925e-23 -1.02537849e-23 -7.16747715e-24
-4.07926538e-24 -1.21401588e-24 1.37888695e-24 3.80664014e-24
6.26134589e-24 8.92580731e-24 1.18936633e-23 1.51317529e-23
1.84919882e-23 2.17584411e-23 2.47040950e-23 2.71353081e-23
2.89152259e-23 2.99694201e-23 3.02806073e-23 2.98763983e-23
2.88124186e-23 2.71563628e-23 2.49810332e-23 2.23688269e-23
1.94188927e-23 1.62435883e-23 1.29512082e-23 9.62920834e-24
6.34788108e-24 3.18911971e-24 2.79939637e-25 -2.20131819e-24
-4.06380382e-24 -5.17455116e-24 -5.52257949e-24 -5.23938686e-24
-4.56365781e-24 -3.77035437e-24 -3.10239379e-24 -2.73563768e-24
-2.78161914e-24 -3.30750470e-24 -4.34786101e-24 -5.89968378e-24
-7.91404629e-24 -1.03041562e-23 -1.29750195e-23 -1.58584013e-23
-1.89286104e-23 -2.21875709e-23 -2.56302874e-23 -2.92145279e-23
-3.28513734e-23 -3.64143835e-23 -3.97525079e-23 -4.26964680e-23
-4.50643261e-23 -4.66827795e-23 -4.74343885e-23 -4.73207155e-23
-4.65131763e-23 -4.53633391e-23 -4.43660753e-23 -4.41000796e-23
-4.51905031e-23 -4.83331736e-23 -5.43906759e-23 -6.45346948e-23
-8.03882901e-23 -1.04128146e-22 -1.38534658e-22 -1.87007603e-22
-2.53577094e-22 -3.42926128e-22 -4.60412050e-22 -6.12048255e-22
-8.04399336e-22 -1.04435508e-21 -1.33877363e-21 -1.69401102e-21
-2.11537416e-21 -2.60654177e-21 -3.16899233e-21 -3.80146531e-21
-4.49947504e-21 -5.25490422e-21 -6.05572752e-21 -6.88594224e-21
-7.72579326e-21 -8.55235963e-21 -9.34051728e-21 -1.00642222e-20
-1.06979952e-20 -1.12184568e-20 -1.16057624e-20 -1.18448233e-20
-1.19262340e-20 -1.18468578e-20 -1.16100375e-20 -1.12254034e-20
-1.07082695e-20 -1.00786437e-20 -9.35992740e-21 -8.57742847e-21
-7.75683514e-21 -6.92280202e-21 -6.09777366e-21 -5.30112722e-21
-4.54865757e-21 -3.85237113e-21 -3.22051949e-21 -2.65780148e-21
-2.16568595e-21 -1.74283487e-21 -1.38561728e-21 -1.08869469e-21
-8.45638503e-22 -6.49524336e-22 -4.93445336e-22 -3.70897308e-22
-2.76011146e-22 -2.03638508e-22 -1.49328474e-22 -1.09254138e-22
-8.01470426e-23 -5.92710118e-23 -4.44273344e-23 -3.39526040e-23
-2.66679125e-23 -2.17655977e-23 -1.86595791e-23 -1.68510352e-23
-1.58556626e-23 -1.52061025e-23 -1.45052962e-23 -1.34870661e-23
-1.20474092e-23 -1.02332298e-23 -8.19661117e-24 -6.13229680e-24
-4.21647245e-24 -2.56316371e-24 -1.21193812e-24 -1.52531919e-25
6.23620809e-25 1.07140526e-24 1.07088324e-24 4.54160347e-25
-9.29919036e-25 -3.14710611e-24 -6.14247656e-24 -9.75582634e-24
-1.37745379e-23 -1.79907813e-23 -2.22338974e-23 -2.63725554e-23
-3.03058110e-23 -3.39677826e-23 -3.73524561e-23 -4.05382634e-23
-4.36805719e-23 -4.69567026e-23 -5.04815682e-23 -5.42360534e-23
-5.80453665e-23 -6.16147035e-23 -6.45977063e-23 -6.66618754e-23
-6.75291547e-23 -6.69951561e-23 -6.49463207e-23 -6.13893615e-23
-5.64868983e-23 -5.05742818e-23 -4.41308860e-23 -3.76978298e-23
-3.17621894e-23 -2.66481131e-23 -2.24555364e-23 -1.90673084e-23
-1.62172814e-23 -1.35911829e-23 -1.09278863e-23 -8.09715091e-24
-5.13973303e-24 -2.26083096e-24 2.26451201e-25 1.99600234e-24
2.80923930e-24 2.57837594e-24 1.36540430e-24 -6.73844499e-25
-3.35995393e-24 -6.53161970e-24 -1.00428155e-23 -1.37325142e-23
-1.73985771e-23 -2.07974339e-23 -2.36703294e-23 -2.57826699e-23
-2.69616894e-23 -2.71233461e-23 -2.62838895e-23 -2.45532783e-23
-2.21107261e-23 -1.91693737e-23 -1.59430731e-23 -1.26264947e-23
-9.38909951e-24 -6.37205823e-24 -3.67582761e-24 -1.33786645e-24
6.84229467e-25 2.50366362e-24 4.26174238e-24 6.06727554e-24]
import matplotlib.pyplot as pp # BJD added 18.11.2020
for n in progressbar.progressbar(range(args.num_frames)):
fluid_model_g.step()
if n % args.oversampling == 0:
rgb = [
6*(-fluid_model_g.G + max_G) / (max_G - min_G),
5*(fluid_model_g.Y - min_Y) / (max_Y - min_Y),
0.7*(fluid_model_g.X - min_X) / (max_X - min_X),
]
zero_line = 1 - tf.exp(-600 * fluid_model_g.Y**2)
frame = make_video_frame([c * zero_line for c in rgb])
writer.append_data(frame)
#=========================inserted code==================================================
y1 = np.loadtxt("test.txt") # shape of 2D array of X values = (426, 240)
row1 = y1[120] # row 120 of 2D array (426, 240)
print(row1)
pp.plot(row1)
pp.show()
#===========================================================================
看:
推荐阅读
- javascript - 将具有父/子关系的对象数组转换为嵌套对象数组
- c++ - 避免奇数个奇数的时间限制
- c# - 当您无法到达管道时,一直异步是否有意义?
- android - 使用外部数据库
- javascript - 如何使用graphql将mongodb中多个集合中的数据传递到1个反应表
- ios - 当我展开我的第二个视图控制器时,第一个视图控制器中的所有变量都变为空
- sql - 如何将数据表行转换为字符串
- c++ - 为什么我的“this”指针在成员函数中为空?
- java - 在java spring @Scheduled中动态设置不同的cron参数
- c - 使用 malloc、memtest 和 dd 了解 RAM 速度