Für Loop und 'numpy.float64' Objekt ist kein iterierbarer Fehler

Ich habe eine einfache für Schleife zu berechnen RMS (root mean square), die in Sigma-Summation Form definiert ist:

for i in range(int(N-(n*periyot/delta)), N+1): sum = np.sqrt((1 / N) * (sum((Cl[i]**2)))) 

Dann habe ich diesen Fehler bekommen:

 TypeError: 'numpy.float64' object is not iterable 

Hier sind einige Informationen über meine Definitionen:

 N=40000, n=10.0, periyot=6.451290, delta=0.005 Cl=[-21.91969 -12.452671 -7.928303 ..., -0.0833991 -0.0579686 -0.0823822] 

3 Solutions collect form web for “Für Loop und 'numpy.float64' Objekt ist kein iterierbarer Fehler”

Entfernen Sie diese sum , jedes Element von Cl ist ein Schwimmer, so dass Sie nicht möglicherweise Summe auf sie aufrufen können:

 >>> sum(2.4) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'float' object is not iterable 

Wenn Sie beabsichtigen, den Rundfunk von numpy aufzurufen, um den Power-Betrieb auszuführen, müssen Sie das Array nicht indizieren.

Das Problem ist, dass Sie sum mit sum überschreiben. Versuchen Sie so etwas wie dies:

 my_sum = 0 for i in range(int(N-(n*periyot/delta)), N+1): my_sum += np.sqrt((1 / N) * (sum((Cl[i]**2)))) 

Replikation Ihrer Berechnung, ein bisschen vereinfacht:

 In [1]: Cl = np.array([-21.91969 , -12.452671 , -7.928303 , -0.0833991,-0.0579686,-0.0823822]) 

Um eine Summe in einer Schleife zu berechnen, einen Wert einzugeben und bei jeder Iteration hinzuzufügen:

 In [2]: res = 0 In [3]: for i in range(len(Cl)): ...: res += np.sqrt((1/3)*Cl[i]**2) ...: In [4]: res Out[4]: 24.551481812296061 

numpy berechnen alles (etwas anders)

 In [5]: np.sqrt((1/3)*Cl**2).sum() Out[5]: 24.551481812296064 

Ihr Sortiment ist ein wenig komplizierter, aber ich denke, dass kann untergebracht werden mit:

 s, e = int(N-(n*periyot/delta)), N+1 # start, end of range for i in range(s, e): .... 

oder

 np.sqrt((1/N) * Cl[s:e]**2).sum() 

Aber ich frage mich, warum du mit dieser sum((Cl[i]**2))) begonnen hast sum((Cl[i]**2))) . Wo du hoffst, eine Reihe von Cl Werten zu platzieren und sie dann zu summieren? Und wiederholen Sie das für mehrere Bereiche?

=============

Es gibt eine np.sum und eine Python- sum . Python- sum funktioniert gut mit einer Liste von Zahlen, wie sie durch ein Listenverständnis erzeugt werden:

 In [6]: [np.sqrt((1/3)*Cl[i]**2) for i in range(len(Cl))] Out[6]: [12.655338922053147, 7.1895529539798462, 4.5774078712669173, 0.048150492835172518, 0.03346818681454574, 0.047563385346433583] In [7]: sum([np.sqrt((1/3)*Cl[i]**2) for i in range(len(Cl))]) Out[7]: 24.551481812296061 

Die Fehler, die sich aus dem Versuch ergeben, sum auf einen einzelnen Wert anzuwenden:

 In [9]: sum(Cl[0]) .... TypeError: 'numpy.float64' object is not iterable In [10]: sum(12.234) ... TypeError: 'float' object is not iterable In [11]: sum(Cl[:3]) # sum of several items Out[11]: -42.300663999999998 

==========

  RMS = ( (1 / N ) * (Cl[1]^2 + Cl[2]^2 + Cl[3]^2 + ... Cl[N]^2) ) ^0.5 

Wird ausgedrückt, für Listen als:

  rms = (1/n) * math.sqrt(sum([Cl[1]**2, Cl[2]**2, ....])) rms = (1/n) * math.sqrt(sum([Cl[i]**2 for i in range(len(Cl))])) rms = (1/n) * math.sqrt(sum([c**2 for c in Cl])) # iterate on Cl directly rms = (1/n) * np.sqrt(np.sum(Cl**2)) # for array Cl 
  • Setzen Sie die Codierung in Python 3 CGI-Skripten
  • Warum Python2 und Python3 das gleiche Windows-Verzeichnis anders behandeln?
  • Rsvg mit Python 3.2 auf Ubuntu
  • Python Interactive Shell - SyntaxError mit Druck
  • Tensorflow, der bei der logistischen Regression einen Fehler auslöst, möglicherweise aufgrund eines fehlerhaften Eingabe-Builders
  • Sichtbarkeit von os.environ zu C Erweiterungsmodulen
  • Auspacken eines Python-Tupels von links nach rechts?
  • Tastaturunterbrechung mit python gtk?
  • Was ist das Python 3 Äquivalent von "python -m SimpleHTTPServer"
  • Drucken Sie ein Wörterbuch von Listen vertikal
  • Sind sys._getframe () f_builtins und __builtins __.__ dict__ äquivalent?
  • Python ist die beste Programmiersprache der Welt.