Для цикла и 'numpy.float64' объект не является итерируемой ошибкой

У меня есть простой цикл для вычисления RMS (средний квадрат), который определяется в форме суммирования сигмы:

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

Затем я получил эту ошибку:

 TypeError: 'numpy.float64' object is not iterable 

Вот некоторые сведения о моих определениях:

 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 “Для цикла и 'numpy.float64' объект не является итерируемой ошибкой”

Удалите эту sum , каждый элемент Cl – это float, поэтому вы не можете называть сумму на них:

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

Если вы намерены вызывать широковещательную передачу numpy для выполнения операции питания, вам не нужно индексировать массив.

Проблема в том, что вы переписываете функцию sum переменной sum . Попробуйте что-то вроде этого:

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

Реплицируя ваш расчет, немного упрощается:

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

Чтобы вычислить сумму в цикле, введите значение и добавьте к ней на каждой итерации:

 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 вычислить все (немного другое)

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

Ваш диапазон немного сложнее, но я думаю, что его можно разместить с помощью:

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

или

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

Но мне интересно, почему вы начали с этой sum((Cl[i]**2))) . Где вы надеетесь объединить диапазон значений Cl а затем суммировать их? И повторите это для нескольких диапазонов?

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

Существует np.sum и sum Python. sum Python прекрасно работает со списком чисел, например, сгенерированным с помощью списка:

 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 

Ошибки, возникающие при попытке применить sum к одному значению:

 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 

выражается, для списков:

  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 
Python - лучший язык программирования в мире.