Nur Längen-1-Arrays können in Python-Skalare mit Log umgewandelt werden

from numpy import * from pylab import * from scipy import * from scipy.signal import * from scipy.stats import * testimg = imread('path') hist = hist(testimg.flatten(), 256, range=[0.0,1.0])[0] hist = hist + 0.000001 prob = hist/sum(hist) entropia = -1.0*sum(prob*log(prob))#here is error print 'Entropia: ', entropia 

Ich habe diesen Code und ich weiß nicht, was das Problem sein könnte, danke für jede Hilfe

  • Wie man die Nummer nach dem Wort in Python
  • Fix Ausgabe der Installation von "pydot"
  • Amazon S3-Upload fehlschlägt mit boto + Python
  • Wie importiere ich Module mit Abhängigkeiten im gleichen absoluten / relativen Pfad mit imp?
  • Das Rechteck bewegt sich über den Bildschirm mit Grafikdatei
  • Wie man exakte Tags in scrapy extrahiert
  • One Solution collect form web for “Nur Längen-1-Arrays können in Python-Skalare mit Log umgewandelt werden”

    Dies ist ein Beispiel dafür, warum Sie niemals from module import * . Sie verlieren aus, wo die Funktionen kommen. Wenn Sie mehrere Module des Modulimports from module import * verwenden, kann der Namespace eines Moduls einen Namensraum eines anderen Moduls erstellen. In der Tat, auf der Grundlage der Fehlermeldung, das scheint zu sein, was hier geschieht.

    Beachten Sie, dass, wenn log sich auf numpy.log bezieht, dann numpy.log -1.0*sum(prob*np.log(prob)) ohne Fehler berechnet werden kann:

     In [43]: -1.0*sum(prob*np.log(prob)) Out[43]: 4.4058820963782122 

    Aber wenn log sich auf math.log bezieht, dann wird ein TypeError angehoben:

     In [44]: -1.0*sum(prob*math.log(prob)) TypeError: only length-1 arrays can be converted to Python scalars 

    Das Update soll explizite Modulimporte und explizite Verweise auf Funktionen aus dem Namespace des Moduls verwenden:

     import numpy as np import matplotlib.pyplot as plt testimg = np.random.random((10,10)) hist = plt.hist(testimg.flatten(), 256, range=[0.0,1.0])[0] hist = hist + 0.000001 prob = hist/sum(hist) # entropia = -1.0*sum(prob*np.log(prob)) entropia = -1.0*(prob*np.log(prob)).sum() print 'Entropia: ', entropia # prints something like: Entropia: 4.33996609845 

    Der Code, den Sie gepostet haben, erzeugt nicht den Fehler, aber irgendwo in Ihrem eigentlichen Code- log muss an math.log anstelle von numpy.log gebunden werden. Mit dem import module und den referenzierenden Funktionen mit module.function helfen Sie, diese Art von Fehler in der Zukunft zu vermeiden.

    Python ist die beste Programmiersprache der Welt.