Ich versuche, eine Reihe von Funktionen auszuführen, um einige Ergebnisse aus einer Reihe von Satellitenbildern zu erhalten (im Beispielfall führe ich Ähnlichkeitsfunktionen durch). Ich beabsichtigte zuerst, alle Pixel gleichzeitig zu durchlaufen, wobei jeder 4 Zahlen enthielt, und berechnete dann einen Wert für jeden, der auf diesen Zahlen basiert, und schrieb ihn dann in ein Array, beispielsweise scipy.spatial.distance.correlation (pixels_0, pixels_1).Iterating auf Daten in zwei 3D-Arrays Python
Das Problem, das ich habe, ist, wenn ich diese Schleife ausführen Ich habe Probleme, es zu einem Array 1000x1000 zu speichern, geben Sie einen Wert für jedes Pixel.
array_0 = # some array with dimensions(1000, 1000, 4)
array_1 = # some array with dimensions(1000, 1000, 4)
result_array = []
for rows_0, rows_1 in itertools.izip(array_0, array_1):
for pixels_0, pixels_1 in itertools.izip(rows_0, rows_1):
results = some_function(pixels_0, pixels_1)
print results
>>> # successfully prints desired results
results_array.append(results)
>>> # unsuccessful in creating the desired array
Ich erhalte die Ergebnisse, die ich den Lauf Fenster Druck nach unten zu bekommen, aber ich weiß nicht, wie es um ihn wieder in ein Array, das ich in einem ähnlichen Herren manipulieren könnte. Sind meine for-Schleifen das Problem oder ist das ein einfaches Problem, wenn ich es an Arrays anschließe? Jede Erklärung, es zu beschleunigen, wäre auch großartig, da ich Python sehr neu bin und alles zusammen programmiert habe.
a = np.random.rand(10, 10, 4)
b = np.random.rand(10, 10, 4)
def dotprod(T0, T1):
return np.dot(T0, T1)/(np.linalg.norm(T0)*np.linalg.norm(T1))
results =dotprod(a.flatten(), b.flatten())
results = results.reshape(a.shape)
Dies bewirkt nun, dass Valueerror: Gesamtgröße des neuen Arrays unverändert sein müssen, und wenn die ersten Ergebnisse Wert Druck erhalte ich nur eine Nummer. Ist das die Schuld an meiner eigenen schlecht konstruierten Funktion oder daran, wie ich numpy benutze?
Ich mag die Vektorweise des Denkens, da eine der Operationen ist, den Winkel zwischen den zwei Vektoren zu finden: Ich schrieb eine einfache Funktion für sie def 'dotprod (T0, T1):' 'Rückkehr np.dot (T0, T1)/(np.linalg.norm (T0) * np.linalg.norm (T1)) 'und ersetzt die' some_function ', aber die Ausgabe ist eine einzelne Zahl und nicht in einem Array. Geht es darum, die Funktion zu wiederholen und nicht die Art, wie Sie die Zahlen im Datensatz durchgehen? – nhawkins