J'ai un tableau d'horodatage, croissant pour chaque ligne de la 2ème colonne de la matrice X. Je calcule la valeur moyenne des horodatages et elle est supérieure à la valeur max. J'utilise un memmap numpy pour le stockage. Pourquoi cela arrive-t-il?numpy signifie est plus grand que max pour memmap
>>> self.X[:,1]
memmap([ 1.45160858e+09, 1.45160858e+09, 1.45160858e+09, ...,
1.45997146e+09, 1.45997683e+09, 1.45997939e+09], dtype=float32)
>>> np.mean(self.X[:,1])
1.4642646e+09
>>> np.max(self.X[:,1])
memmap(1459979392.0, dtype=float32)
>>> np.average(self.X[:,1])
1.4642646e+09
>>> self.X[:,1].shape
(873608,)
>>> np.sum(self.X[:,1])
memmap(1279193195216896.0, dtype=float32)
>>> np.sum(self.X[:,1])/self.X[:,1].shape[0]
memmap(1464264515.9120522)
EDIT: Je ai téléchargé le fichier memmap ici. http://www.filedropper.com/x_2 Voici comment je le charge.
filepath = ...
shape = (875422, 23)
X = np.memmap(filepath, dtype="float32", mode="r", shape=shape)
# I preprocess X by removing rows with all 0s
# note this step doesn't affect the problem
to_remove = np.where(np.all(X == 0, axis=1))[0]
X = np.delete(X, to_remove, axis=0)
Est-ce que le changement de comportement si vous testez avec 'np.array (self.X)' au lieu de 'self.X' ou' np.array (self.X [:, 1]) 'la place de 'self.X [:, 1]'? – user2357112
@ user2357112 non, il renvoie toujours la mauvaise moyenne – siamii
@siamii: C'est un problème d'accumulateur. Vous devriez utiliser des accumulateurs float64 pour de tels tableaux. Vérifiez la réponse pour plus de détails. – Vasanth