2017-06-26 3 views
0

Ich verwende eine for in Python, um ein Array aufzufüllen. Zur Zeit iteriere ich über alle Elemente im Array, und für jeden Index lade ich relevante Informationen aus einem anderen Array ab und führe dann eine Operation aus.Batch algebraische Operationen in Python

Dies ist der aktuelle Code

for idx, vertex_color in enumerate(self.vertex_colors): 
    coefficients = self.cubic_coefficients[idx*3:(idx*3)+3] 

    # Applies cubic regression to obtain regressed mean amplitude 
    c[idx] = coefficients[0] * current_beta**2 + coefficients[1] * current_beta + coefficients[2] 

Aber mein Vektor self.vertex_colors ist sehr groß, weshalb diese für Schleife ist mein Flaschenhals. Gibt es diese Art von Operationen überhaupt, um einen einzigen Befehl zu parallelisieren oder auszuführen? In gewisser Weise möchte ich tun, was bsxfun in MATLAB tut, aber für eine beliebige Funktion.

+1

haben Sie versucht, ein 'np.array' zu verwenden? sie sind viel effizienter, dass native Listen – dabadaba

Antwort

1

Für Ihren speziellen Fall können Sie auf diese Weise auf die Schleife verzichten, wenn coefficients eine numpy.array ist.

import numpy 

coefficients = numpy.array([1, 2, 3, 1, 2, 3]) 
current_beta = 1 
c = (coefficients[0::3] * current_beta**2 
    + coefficients[1::3] * current_beta 
    + coefficients[2::3]) 

Dies funktioniert für jede Länge von Koeffizienten. Die für das Slicing verwendete Syntax beginnt im Grunde am Punkt und nimmt dann jedes dritte Element.

+0

Großartig, richtig was ich brauchte! Ich wusste, dass es ohne Schleife gemacht werden könnte, aber die Syntax nicht richtig bekommen konnte! – Dan

Verwandte Themen