3 votes

Accéder aux tableaux par index

Je veux accéder aux tableaux comme dans le code d'exemple ci-dessous, c'est assez lent. Est-il possible de créer un vecteur à partir de i et f_s et accéder aux tableaux en fonction de cet index ?

def calc(self, length):
    for i in range(int(f_s*length*6)):
        t = i / f_s  
        self.data[i] = (numpy.multiply(sinTable512[int(t*f_carrier)%512], self.Signal[int(t*f_prn)%1023]))

J'imagine que le code ressemblera à ceci :

def calc(self,length):
    t = numpy.arange(0, f_s*length*6, 1/f_s)
    t_sin = t * f_carrier %512
    t_sig = t * f_prn % 1023
    self.data[i] = (numpy.multiply(sinTable512[t_sin], self.Signal[t_sig]))

Y a-t-il d'autres moyens de faire quelque chose de similaire ? De ce dont je me souviens, les opérations vectorielles sont beaucoup plus rapides que les boucles for, du moins en MatLab, est-ce la même chose pour Python ou existe-t-il une autre méthode pour accélérer cette opération ?

1voto

Patrick Points 79

J'ai trouvé la réponse par moi-même. La solution consiste à utiliser la fonction take de numpy. Vous pouvez passer le tableau et un vecteur d'indices à la fonction et elle renverra les tableaux désirés.

def calc(self,length):
    t = numpy.arange(0, f_s*length*6, 1/f_s)
    t_sin = t * f_carrier %512
    t_sig = t * f_prn % 1023
    self.data = (numpy.multiply(numpy.take(sinTable512, t_sin), numpy.take(self.Signal, t_sig)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X