打印从文件读取的数据和浮点除法时,浮点的文本无效

2024-05-17 03:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它使用单独的C++可执行文件的输出,并创建结果数据的散点图/分叉图。应用背景是通过迭代驱动力的多个值来查看角度值与驱动力的关系,以获得结果角度并频闪采样结果,这是一个关于计算物理课程中非线性阻尼驱动摆的问题

import os
import sys
import numpy as np
import matplotlib.pyplot as plt

gbl      = 1.0
kappa    = 0.5
T_D      = 9.424778
ic_ang   = 0.1
ic_avel  = 0.0
t_final  = 200
Nstep    = 7500
method   = "runge_kutta"

ic_ang   = 0.1
Fmin     = 0.8
Fmax     = 1.6
F_D      = float(Fmin)

tstep    = T_D/(t_final/Nstep)
Nrep     = 3 * tstep
select   =[]
step     = 0.01
Nite     = (Fmax-Fmin)/step
rng      = int(Nite-1)

for i in range(rng):
    pfile= open('param.dat','w')
    pfile.write('%f %f %f %f\n' %(gbl,kappa,F_D,T_D))
    pfile.write('%f %f %f\n'%(ic_ang,ic_avel,t_final))
    pfile.write('%d %s\n'%(Nstep,method))
    pfile.close()

os.system('./a.out > bif.log')

with open("data.out",'r') as datafile:
    data=datafile.readlines()

select=data[-Nrep:Nstep:int(tstep)]

for j in select:
    plt.plot(F_D, j, "o", color='b', markersize=0.3)
    print(F_D,j)
F_D += step
plt.xlabel(r'$F_D$')
plt.ylabel(r'$\theta_{repeat}$')
#plt.xticks([])
plt.yticks([])
plt.show()

但是,当我尝试运行脚本时

Traceback (most recent call last):
File "bif.py", line 45, in <module>
plt.plot(F_D, j, "o", color='b',markersize=0.3)

File"/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/pyt hon/matplotlib/pyplot.py", line 2987, in plot
ret = ax.plot(*args, **kwargs)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 4138, in plot
self.add_line(line)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 1497, in add_line
self._update_line_limits(line)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 1508, in 
_update_line_limits
path = line.get_path()

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/lines.py", line 743, in get_path
self.recache()

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/lines.py", line 429, in recache
y = np.asarray(yconv, np.float_)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/numpy/core/numeric.py", line 460, in asarray
return array(a, dtype, copy=False, order=order)

ValueError: invalid literal for float(): 0 0.1 0 0.004995834722

修改某些值以尝试调试脚本会引发一个单独的异常

Traceback (most recent call last):
File "bif.py", line 24, in <module>
tstep    = T_D/(t_final/Nstep)
ZeroDivisionError: float division by zero

我对Python非常陌生,所以这些异常对我来说都没有多大意义。但是,由于Nstept_finalT_D都有有限的值,所以没有理由(我无论如何都能看到)出现被零除的错误。你知道吗

我也看到了ValueError可能的错误,因为第1列和第3列中的输出(时间和角速度)不是应该的浮点值。但是,我不知道为什么这些值没有被转换成应该的浮点值。你知道吗

任何帮助都将不胜感激。你知道吗

编辑:本期已解决


Tags: inpyextrasmatplotlibliblinelibraryplt
1条回答
网友
1楼 · 发布于 2024-05-17 03:20:43

我想你在问两个问题,正如我看到的,最后一个关于0除的问题是比较容易的。也就是说,现在代码中的表达式t_final/Nstepan integer division expression,结果是0。所以这条线

tstep    = T_D/(t_final/Nstep)

除以零。你知道吗

第二个问题是为什么matplotlib抱怨数据。要真正诊断这个问题,我们需要查看程序读取的数据文件的内容。但是,我认为问题源于您试图将文本(Python字符串)传递给需要数字数据类型的函数。当你readlines()输入文件时,我认为你没有做任何转换。结果,一段文本字符串被传递给plt.plotmatplotlib并试图从这个表示形式构造一个数字数据类型。如果读取数据,根据文件格式和分析逻辑进行适当的转换,效果会更好。如果您处理的是文本数据文件,那么您可能需要查看numpy.loadtxt。你知道吗

相关问题 更多 >