per i nell'intervallo (k) ottimizzazione del ciclo del codice in python [duplicato]
Sto cercando di generare un codice G usando python. Scrivo istruzioni in base ai valori dei pixel dell'immagine in scala di grigi, ma se devo lavorare con immagini grandi ci vuole un'eternità per compilare un codice. Alcuni programmi in codice G elaborano queste immagini in pochi secondi. Come posso rendere questo programma più veloce?
Grazie per il tuo tempo.
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)
Risposte
Puoi rappresentare il valore totale di tutti ki messaggi di posta elettronica in un generatore:
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))
e scriverlo nel file tutto in una volta:
with open('file.txt', 'a') as a_file:
a_file.writelines(k)
(Ho usato fstrings invece di str.format, poiché penso che migliori notevolmente la leggibilità. Funziona con tutte le versioni recenti di Python.)
Il vantaggio principale qui, come molti hanno menzionato nei commenti, è che non apriresti, chiuderai e riapriresti il file ad ogni iterazione interna.