@cpt.buzz: Python- und Numpy-Grundlagen lernen würde ich mal sagen. Du löst das im Moment mit Numpy so wie man es in reinem Python ohne Numpy machen würde, nämlich in dem Du zwei explizite Schleifen in Python schreibst, die jeden Wert einzeln berechnen. Dazu braucht man kein Numpy. Bei dem Lösungsweg fehlt Dir anscheinend das Grunlagenwissen über Listen in Python. Jedes einzelne Ergebnis alleine in einer Liste zu verpacken ist zum Beispiel ziemlich sinnfrei.
Wenn Du es mit Numpy lösen möchtest, dann musst Du es so formulieren dass sich die Rechenoperationen nicht auf einzelne Werte beziehen, sondern auf ein ganzes Numpy-Array angewendet werden. Dann laufen die Schleifen innerhalb der Numpy-Array-Datentypen ab. Da die in C und teilweise Fortran implementiert sind, geht das dann in der Regel deutlich schneller als Schleifen im Python-Code.
Etwas verwirrend ist auch, dass Du `pixelarray` und `d` vor der Schleife an Werte bindest, die nie verwendet werden. Und das in der Schleife `pixelarray` an einzelne Werte gebunden wird. Bei dem Namen würde man keinen Skalar, sondern eben tatsächlich ein Array erwarten.
Nachtrag: Eine Variante ohne explizite Schleifen in Python:
Code: Alles auswählen
import numpy as np
pixelnr = 4
pixelnr_b = pixelnr / 2 + 1
x = 0.5
y = 4
alpha = np.pi / 4
sin_alpha = np.sin(alpha)
cos_alpha = np.cos(alpha)
pixelarray = np.arange(1 - pixelnr_b, pixelnr + 1 - (pixelnr / 2))
d = np.array(np.arange(1, pixelnr + 2), ndmin=2).T.repeat(len(pixelarray), 1)
pixels = (
(((d - pixelnr_b) * cos_alpha + (sin_alpha * pixelarray)) / x)**2
+ (((-d + pixelnr_b) * sin_alpha + (cos_alpha * pixelarray)) / y)**2
)
print pixels