簡體   English   中英

如何提高此Python代碼的效率

[英]how to improve efficiency of this Python code

我在ABAQUS PDE中編寫了一個簡單的代碼,將結果導出到csv文件。 我把它的一部分放在這里,我想知道如何提高它的效率。

非常感謝您的寶貴意見。

from odbAccess import *
from abaqusConstants import *

outputname='job-23.odb'

odb=openOdb(outputname)

myAssembly=odb.rootAssembly

% Defining number of elements

nofl=46

s1=open('s1.csv','w')

%Defining lenght of steps
lengthsteps=len(odb.steps.keys())

for j in range(nofl):

    for i in range(lengthsteps-1):
        step=odb.steps.keys()[i]
        s=odb.steps[step]
        jj=odb.steps[opstep].historyRegions.keys()[j]
        sdata=s.historyRegions[jj].historyOutputs['S11'].data
        l=len(sdata)
        for k in range(l-1):
            s1.write('%10.4E\n' % sdata[k][1])


s1.close()

應該在Python中使用的東西是:

objectNr = len(myObjects)
for i in range(objectNr-1):
  a = myObjects[i]
  print a

這樣的事情會更好:

for myObject in myObjects:
   print myObject

在您的情況下,遍歷odb.steps可能會更容易。

for step in odb.steps:
  s=odb.steps[step]
  ...

短得多好讀,這是python方式。

有一些簡單的方法可以改善您的代碼,但是我不確定性能會發生多少變化。 您以前做過一些浪費的工作,但我認為這不是非常昂貴的工作。

最大的變化是避免使用keys()調用和整數索引來獲取字典鍵。 相反,我們只是直接訪問values() 由於您當前的代碼寫出交錯的數據(例如,按步驟分組,而不是按項目分組),因此我們將具有的嵌套結構(生成器表達式中的列表)與zip(*(...))

with open('s1.csv','w') as s1:
    for item in zip(*(step.historyRegions.values() for step in steps.values()[:-1]))
        for step in item:
            for data in step:
                s1.write('%10.4E\n' % data[1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM