Ich habe eine mehrdimensionale numpy Array, die eine Reihe von Bildern ist. Warum führt die Berechnung des Bildkanals zu unterschiedlichen Ergebnissen, wenn das Achsenargument für np.mean verwendet wird?numpy mean multidimensionalen Array
>>> X = np.array(np.random.random((9999, 128, 128, 4)) * 1e5, dtype='float32')
>>> X.shape
(9999, 128, 128, 4)
>>> mean_by_axis = np.mean(X, axis=(0, 1, 2))
array([ 13423.11523438, 13423.11523438, 13423.11523438, 13423.11523438], dtype=float32)
>>> mean = np.mean(X[:, :, :, 0])
50001.297
Ich erwarte mean_by_axis [0] == mean. Warum ist das nicht der Fall? Das gleiche gilt für die restlichen axis-3-Indizes 1, 2 und 3. Missverstehe ich, wie das Achsenargument in np.mean zu verwenden ist?
Mit numpy Version '1.12.1'
Ist es möglich, dass ich die float32 Akkumulator bin überfüllt? Zum Beispiel:
>>> X = np.random.random(size=(100, 128, 128, 4))
>>> np.mean(X, axis=(0, 1, 2))
array([ 0.49978557, 0.49985835, 0.50000321, 0.50015689])]
>>> np.mean(X[:, :, :, 0])
0.49978556940636332
Das sieht richtig aus. Wenn dies der Fall ist, warum überläuft die Slice-Methode nicht auch den Akkumulator und gibt das gleiche Ergebnis? Vielleicht verwendet die Slice-Methode einen float64-Akkumulator und die Achsenmethode einen float32-Akkumulator?
Ich verwende die Achse wie im obigen Link beschrieben. Meine Frage bezieht sich darauf, warum das Achsenergebnis anders ist als das Scheibenergebnis. – bfb