für i im Bereich (k) Codezyklusoptimierung in Python [Duplikat]
Ich versuche einen G-Code mit Python zu generieren. Ich schreibe Anweisungen gemäß den Pixelwerten des Graustufenbilds, aber wenn ich mit großen Bildern arbeiten muss, dauert es ewig, einen Code zu kompilieren. Einige G-Code-Programme verarbeiten diese Bilder in Sekunden. Wie kann ich dieses Programm schneller machen?
Vielen Dank für Ihre Zeit.
gray_height = gray.shape[0]
gray_length = gray.shape[1]
print("length", gray_length)
print("height", gray_height)
for i in range(gray_length):
j=0
for j in range(gray_height):
k = 'G01 X{}'.format(round(i*0.1,3)) + ' Y{}'.format(round(j*0.1,3)) + '\n' +'G01 Z -10' +'\n' +'G04 {}'.format(round(gray[i,j],2)) +'\n' + 'G01 Z 10' +'\n'
with open("file.txt", "a") as a_file:
a_file.write(k)
Antworten
Sie können den Gesamtwert aller ks in einem Generator darstellen:
k = (f'''G01 X{round(i*0.1,3)} Y{round(j*0.1,3)}
G01 Z -10
G04 {round(gray[i,j],2)
G01 Z 10
''' for i in range(gray_length) for j in range(gray_height))
und schreibe es auf einmal in die Datei:
with open('file.txt', 'a') as a_file:
a_file.writelines(k)
(Ich habe fstrings anstelle von str.format verwendet, da dies meiner Meinung nach die Lesbarkeit erheblich verbessert. Es funktioniert mit allen neueren Versionen von Python.)
Der Hauptvorteil hier ist, wie viele in Kommentaren erwähnt haben, dass Sie die Datei nicht bei jeder inneren Iteration öffnen, schließen und erneut öffnen würden.