我正在使用参数扫描测试不同的变量如何影响模型。我试图从一个文本文件中读入参数,并将它们传递给一个函数,在该函数中计算模型并返回答案并输出。你知道吗
例如,如果我有一个输入文件,第一行是参数名,后续行是我要计算的参数组合:
input.txt
param1, param2, param3, ..., paramm
0,0,1
0,0,2
0,1,1
0,1,2
0,2,1
0,2,2
1,0,1
1,0,2
1,1,1
1,1,2
1,2,1
1,2,2
我有一个计算模型的函数。为了简单起见,我会说模型是我所有参数的总和:
def model(param1,param2,param3...,paramm):
param1=0
param2=0
param3=0
param4=0
param5=0
.
.
.
paramn=0
answer=parma1+param2+param3+param4+param5
return answer
其中设置参数=0是一种初始化它们的方法(我现在知道它不适用于param1、param2或param3,因为它会覆盖写入它们的内容)。我包括param4和param5以表示可能存在其他参数,我不改变这些参数,而是采用一些默认值。你知道吗
如何读入文件并运行所有参数组合?我应该创建一个名为params的元组,并在每次读取文件后调整值,还是有更好的方法?你知道吗
编辑1:
我编辑了这个问题,添加了文本文件和常量中已知的更多参数。我最好创建一个parameter对象,并为每个传递给函数的过程编辑对象的值。你知道吗
请注意,虽然本例中的函数是一个和,但在实际程序中要复杂得多,很可能只使用参数的一个子集调用其他函数。例如
def model1(param1):
a=1
b=2
c=3
return a*param1**2+b*param1+c
def model(param1,param2,param3...,paramm):
param1=0
param2=0
param3=0
param4=0
param5=0
.
.
.
paramn=0
answer=model1(param1)+param2+param3+param4+param5
使用
with open
并使model
更容易解决问题,请使用以下完整代码:有几种方法可以做到这一点。如果文件中的第一行不存在,那么您可以将该文件视为.csv文件(“param1,param2,param3”的顶行是标题,随后的行是这三列的逗号分隔值)。Python已经有了现成的模块,可以在CSV文件中读写数据。你可以看看here。你知道吗
不过,在您的特定情况下,您的文件以一行数据开始,第二行上紧跟着CSV头,然后第三行以及以后的行有CSV dat。如果您最终尝试读取每行数字数据并将其传递给函数,则可以执行以下操作:
打印出来:
仔细看一下命令
[ float(i) for i in line.strip().split(',') ]
,它的作用是从文件中取出一行数字,使用.strip()
切掉末尾的换行符,拆分逗号上的内容,并将内容从字符串转换为浮点数。你可以用整数代替浮点数,但我不知道你的真实数据是否包含非数值。如果需要的话,我还用文件的前两行创建了变量。你知道吗编辑:如果正如评论员解释的那样,
readlines()
因为有无数行而无法完成这项工作,那么这里有一个返工,尽管它会跳过行,直到找到一个以一个数字开头的行,它假定这是一行数据:相关问题 更多 >
编程相关推荐