【发布时间】:2017-10-04 20:51:13
【问题描述】:
我有一个名为 plate2.odb 的 .odb 文件,我想从中提取应变数据。为此,我构建了下面的简单代码,该代码循环遍历每个元素的字段输出 E(应变)并将其保存到列表中。
from odbAccess import openOdb
import pickle as pickle
# import database
odbname = 'plate2'
path = './'
myodbpath = path + odbname + '.odb'
odb = openOdb(myodbpath)
# load the strain values into a list
E = []
for i in range(1000):
E.append(odb.steps['Step-1'].frames[0].fieldOutputs['E'].values[i].data)
# save the data
with open("mises.pickle", "wb") as input_file:
pickle.dump(E, input_file)
odb.close()
问题在于将应变值加载到列表中的 for 循环需要很长时间(1000 个元素需要 35 秒)。以这个速度(0.035 次查询/秒),我需要 2 个小时才能为包含 200,000 个元素的模型提取数据。为什么这需要这么长时间?我怎样才能加速这个?
如果我在任何 Python 循环之外执行单个应变查询,则需要 0.04 秒,所以我知道这不是 Python 循环的问题。
【问题讨论】: