RuntimeWarning: Division durch Null-Fehler -: Wie vermeiden? PYTHON, NUMPY

Läuft bei mir in RuntimeWarning: Invalid value encountered in teilen

 import numpy
 a = numpy.random.rand((1000000, 100))
 b = numpy.random.rand((1,100))
 dots = numpy.dot(b,a.T)/numpy.dot(b,b)
 norms = numpy.linalg.norm(a, axis =1)
 angles = dots/norms ### Basically I am calculating angle between 2 vectors 

Gibt es einige Vektoren in meine eine, die norm als 0. während also die Berechnung von Winkeln es gibt Laufzeit-Warnung.

Gibt es einen ein-Zeilen-pythonic Weg, um zu berechnen, Winkel, während unter Berücksichtigung der Normen, welche sind Sie 0?

angles =[i/j if j!=0 else -2 for i,j in zip(dots, norms)] # takes 10.6 seconds

Aber es braucht eine Menge Zeit. Da alle Winkel werden Werte zwischen 1 und -1 und ich brauche nur 10 max-Werte, dies wird mir helfen. Dies dauert rund 10,6 Sekunden, das ist Wahnsinn.

Sie können filter Normen, vor der übergabe?
Nein, ich möchte die Erhaltung der Indizes, weil ich will, Indizes der 10 größten Winkel in den enden, die weiter abgestimmt, die in eine andere Liste. So erhalten Indizes ist ein muss für mich.
Mit dem code, den du gepostet hast, die angles variable wird NaNs, wo norms null ist. Ist nicht, was Sie wollen? Beachten Sie, dass, wenn Sie wollen None statt NaN sind, dann werden Sie brauchen, um angles von dtype object, das ist schlecht für die Leistung... (es ist Auch möglich, nur unterdrücken RuntimeWarnings. Ist es das, was Sie wollen?)
Ich möchte bestimmten Wert an der Stelle, wo NaN ist aufgetreten. So kann ich manipulieren, während die Sortierung.
nans Art höher als alles andere, so, wenn Sie die Sortierung können Sie nur Streifen die top np.count_nonzero(np.isnan(d....ravel()) Werte

InformationsquelleAutor pg2455 | 2014-08-01

Schreibe einen Kommentar