#2
xiangyue05102022-06-20 10:34
|
但是我写完这段代码的时候发现执行效率不高,1000个单元的数据处理(代码中用的是随机生成的数据进行测试,未写读取数据的代码)需要一个小时,但是我的模型有20万个单元
可能是我的代码写的不够高,请教各位大神如何进行优化
程序代码:
import numpy as np
import datetime
log=open("Out.txt",mode='w',encoding='utf-8')
t1=datetime.datetime.now()
print("************* Printout: Start Time *********",file=log)
print(t1,file=log)
# 创建测试用的矩阵, 6个维度分别为σx,σy,σz,σxy,σyz,σxz =====> 实际代码中从文本中读取
n=150 # 单元数量204375
lc_n= 40 # 组合工况数量40
sxs=[np.random.random((n,6)) for i in range(13)] # 13个基础工况
# 创建2个零矩阵,用于存放最大值和最小值 所有工况
all_maxS=np.zeros((n,6))
all_minS=np.zeros((n,6))
# 创建1个零矩阵,用于存放等效应力
all_EqvS=np.zeros((n,1))
for lc_i in range(1,lc_n): #组合工况迭代
# 创建零矩阵,用于存放最大值和最小值
lc_maxS = np.zeros((n, 6))
lc_minS = np.zeros((n, 6))
# 创建1个零矩阵,用于存放等效应力
lc_EqvS = np.zeros((n, 1))
for i in range(1,180): #波峰相位角迭代
for j in range(1,180): #倾斜方位角迭代
LF = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] #工况组合系数,测试使用。 =====> 实际数据中从文本中读取, 最后几项需要根据波峰相位角、倾斜方位角计算得到
combined_S=np.zeros((n,6))
for k in range(1,13): # 基础工况迭代
combined_S = combined_S+LF[k]*sxs[k] # 组合好的应力分量
lc_maxS = np.maximum(lc_maxS, combined_S) #直接用矩阵计算得到同一工况下,不同波峰相位角、倾斜方位角的最大值
lc_minS = np.minimum(lc_minS, combined_S) #直接用矩阵计算得到同一工况下,不同波峰相位角、倾斜方位角的最小值
EqvS=(((combined_S[:,0]-combined_S[:,1])**2 + (combined_S[:,1]-combined_S[:,2])**2 + (combined_S[:,2]-combined_S[:,0])**2 + 6*(combined_S[:,3]**2 +combined_S[:,4]**2+combined_S[:,5]**2))/2)**0.5
lc_EqvS=np.maximum(lc_EqvS,EqvS) #直接用矩阵计算得到同一工况下,不同波峰相位角、倾斜方位角的最大等效应力
#********************** 增加将 lc_maxS、lc_minS 输出到文本的代码 ************************
all_maxS = np.maximum(lc_maxS, all_maxS) #直接用矩阵计算得到所有工况的最大值
all_minS = np.minimum(lc_minS, all_minS) #直接用矩阵计算得到所有工况的最小值
all_EqvS = np.maximum(lc_EqvS, all_EqvS) #直接用矩阵计算得到所有工况的最大等效应力
# ********************** 增加将 all_maxS、all_minS 输出到文本的代码 ************************
t2=datetime.datetime.now()
print("************* Printout: End Time *********",file=log)
print(t2,file=log)
print("************* Time Consumed: seconds *********")
print((t2-t1).seconds,file=log)
log.close
[此贴子已经被作者于2022-6-20 08:26编辑过]