optimisation du cycle de code pour i in range (k) en python [duplicate]

Oct 26 2020

J'essaye de générer un G-code en utilisant python. J'écris des instructions en fonction des valeurs de pixels de l'image en échelle de gris, mais si je dois travailler avec de grandes images, il faut une éternité pour compiler un code. Certains programmes G-code traitent ces images en quelques secondes. Comment puis-je accélérer ce programme?

Merci pour votre temps.

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)
    

Réponses

kojiro Oct 26 2020 at 15:17

Vous pouvez représenter la valeur totale de tous les ks dans un générateur:

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))

et écrivez-le dans le fichier en une seule fois:

with open('file.txt', 'a') as a_file:
    a_file.writelines(k)

(J'ai utilisé fstrings au lieu de str.format, car je pense que cela améliore considérablement la lisibilité. Cela fonctionne avec toutes les versions récentes de Python.)

Le principal avantage ici, comme beaucoup l'ont mentionné dans les commentaires, est que vous n'ouvririez pas, ne fermeriez pas et ne rouvririez pas le fichier à chaque itération interne.