Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python无限循环随着时间的推移而变慢_Python_Pandas_Generator - Fatal编程技术网

Python无限循环随着时间的推移而变慢

Python无限循环随着时间的推移而变慢,python,pandas,generator,Python,Pandas,Generator,我有一个函数,它是一个更大的无穷大函数的一部分。我发现这个函数会减慢循环速度,最终我的电脑会完全冻结 import numpy as np from time import time def make_fps(d, F, df_f, state, t_start, PHASE, run_num): F += 1 if F < 100: fps = np.NaN fps_average = np.NaN else:

我有一个函数,它是一个更大的无穷大函数的一部分。我发现这个函数会减慢循环速度,最终我的电脑会完全冻结

import numpy as np
from time import time
 
  
def make_fps(d, F, df_f, state, t_start, PHASE, run_num):
    F += 1
    if F < 100:
        fps = np.NaN
        fps_average = np.NaN
    else:
        fps = round(F / (time() - t_start), 2)
        fps_average = np.NaN
    if F > 200:
        fps_average = round(df_f["fps"].mean(), 2)
    df = {'frame number': [F], 'fps': [
        fps], 'fps average': [fps_average], 'state': [state],  'run number': [run_num]}
    df_new = pd.DataFrame(data=df)
    df_f = df_f.append(df_new)
    print("frame number", F, "fps", fps, "average fps",
            fps_average,  "run number", run_num)
    return df_f, F, fps, run_num, fps_average

df_f = pd.DataFrame()
state = "this is a test"
t_start = time()
d, F, PHASE, run_num = 0,0, 0, 0       

while True:
    df_f, F, fps, run_num, fps_average = make_fps(d, F, df_f, state, t_start, PHASE, run_num)
    print (F, fps, fps_average)
将numpy导入为np
从时间导入时间
def生成fps(d、F、df、状态、t启动、阶段、运行数量):
F+=1
如果F<100:
fps=np.NaN
fps_平均值=np.NaN
其他:
fps=四舍五入(F/(时间()-t_开始),2)
fps_平均值=np.NaN
如果F>200:
fps_average=四舍五入(df_f[“fps”].mean(),2)
df={'frame number':[F],'fps':[
fps],“fps平均值”:[fps_平均值],“状态”:[state],“运行次数”:[run_num]}
df_new=pd.DataFrame(data=df)
df_f=df_f.追加(df_新)
打印(“帧数”,F,“fps”,fps,“平均fps”,
fps_平均值,“运行次数”,运行次数)
返回df_f,f,fps,run_num,fps_average
df_f=pd.DataFrame()
state=“这是一个测试”
t_开始=时间()
d、 F,相位,运行数=0,0,0,0
尽管如此:
df_f,f,fps,run_num,fps_average=make_fps(d,f,df_f,state,t_start,PHASE,run_num)
打印(F、fps、fps_平均值)
我认为构建数据框架会引起问题。此外,此功能是否会从实现生成器中受益?我是python新手,不清楚如何正确应用生成器


谢谢大家!

看起来您一次又一次地传递相同的参数。 我想不出为什么这会是个好主意。 但关于生成器的问题,只需将
return
替换为
yield


祝你好运

请解释一下你想做什么…这个函数在一个更大的应用程序中使用。目标是计算循环速度(fps)、平均循环速度(fps_average)并构建一个数据帧,该数据帧稍后将保存到.cvs文件中。构建数据帧是否会有问题?您将哪些参数称为“相同”?您指的是状态、阶段和运行数量吗?这些值在作为最终解决方案一部分的其他函数中更改。为了这个例子,我应该把它们删掉。当用
yield
替换
return
时,我是否仍然允许参数?例如
返回df\u f,f,fps,run\u num,fps\u average
变成
收益df\f,f,fps,run\u num,fps\u average
?当我这样做时,会得到一个错误。
df\u f,f,fps,run\u num,fps\u average=list(make\u fps(d,f,df\u f,state,t\u start,PHASE,run\u num))[0]