我想绘制x_list和t_list,两者都必须具有相同的第一维,现在我的t值只是一个值。如果例如t = 4且dt = 0.01,我希望t_list成为从零到t = 4的值的列表,步骤dt = 0.01。它应该与要绘制的x_list具有相同的长度。另外,如何让x_list获取每dt = 0.01的值?我在代码中提出了我的问题:
def simulation(dt,t,temp,eta,x,v):
add_dt=dt
x_list=[]
t_list=[]
sigma=math.sqrt((2*temp*eta)/dt)
#Can I use this? This doesn't give right plotted function I think.
#while dt<t:
#t_list.append(dt)
#x_list.append(brownian(x,v,dt,sigma,eta))
#dt+=add_dt
#This works, but I would like the x_list to be updated every dt=0.01
for i in range(0,int(t)):
x_list.append(brownian(x,v,dt,sigma,eta))
#This is what I want in the end:
plt.plot(t_list,x_list)
答案 0 :(得分:3)
这将检查theline[0]
是否等于x
。如果是,请返回True
:
theline[0] == x
这会将x
定义为theline[0]
:
x = theline[0]
并且...... f.readline()
只会读取一行行,但f.readlines()
可以将整个文件读入列表并按行分割。
所以你的程序应该是这样的:
def parameter():
f = open('parameters.txt','r')
theline = f.readlines()
x = theline[0]
v = theline[1]
dt = theline[2]
f.close()
答案 1 :(得分:1)
您正在读取文件,因此如果您想将该行的某些数据放入x,v或dt中,您应该像这样使用它:
x = theline[0]
v = theline[1]
dt = theline[2]
在这种情况下,您一次只能使用一个字符。 请加入parameters.txt的样本
答案 2 :(得分:0)
您的文件格式是什么?一行中的一个值或一行上的所有值?该值的数字格式是什么?
您的theline
变量可以看作是字符数组,因此您的当前代码会使用第一个值覆盖您的本地变量x
,v
,dt
从文件中读取的每一行的字符。很确定,这不是你想要的。
无论如何,你不能修改外部变量,所以你的函数应该返回从文件中读取的值。
答案 3 :(得分:0)
如果您使用值替换parameters.txt
输入文件的最后一行上的表达式,请将其作为其内容:
0
0
.001
你可以这样做:
import ast
def get_parameters(filename):
with open(filename, 'r') as f:
return [float(ast.literal_eval(next(f).strip())) for _ in range(3)]
position, velocity, dt = get_parameters('parameters.txt')
print('position: {}, velocity: {}, dt: {}'.format(position, velocity, dt))
输出:
position: 0.0, velocity: 0.0, dt: 0.001
要允许1/1000
这样的表达式,您可以使用内置的eval()
函数而不是ast.literal_eval()
,因为前者评估任意Python表达式。然而,由于恶意代码可能被放入输入文件并被执行,因此它被认为是非常不安全的。