2017-05-12 46 views
0

我是新來的python編碼 和我正在寫一個代碼來計算一系列的總和,我開始通過編寫一個函數,其中輸入是總和的迭代,但是當我編譯它給了我在def G(i)線下的錯誤:只有長度爲1的陣列可以轉換到Python標量Python錯誤只有長度爲1的數組可以轉換爲Python標量

你能幫助我,請

import matplotlib.pyplot as plt 
import numpy as np 
import scipy.special as sp 
import pylab as pylab 

def G(i): 
    return (sum(((-1*(2*l+1))/(4*np.pi*(l**2+l)))*sp.legendre(l)(0.5) for l in i)) 

pylab.ylim([-1,1]) 
sumrange = np.arange(1,70,1) 
plt.plot(sumrange,G(sumrange),color='red') 
+0

可能的重複[TypeError:只能將長度爲1的數組轉換爲Python標量,同時嘗試按指數擬合數據](http://stackoverflow.com/questions/21687581/typeerror-only-length-1-arrays-可以轉換爲python-scalars-while-trying) –

+0

簡短版本:使用'np.sum'而不是'sum'。 –

+0

@aryamccarthy np.sum不起作用,問題是與範圍輸入我認爲 – outlawoutlawz

回答

0

問題莖從i是一個序列,而不是一個單一的值。在你的情況下,它是np.arange(1,70,1)

當您撥打range(1,i,1)時,這沒有意義:i不是單一值。您可以通過將for l in range(1,i,1)替換爲for l in i來修復它。

還有一些其他問題 - 我不確定在哪裏定義了cosgamma。你應該在未來提供一個Minimum, Complete, and Verifiable example

+0

是的,我忘了告訴我用我想要的任何值替換cosgamma,但是對於l中的我不工作,它說:無效語法 – outlawoutlawz

+0

確保在切換時刪除了正確數目的右括號:完全是1 –

+0

但是這是直到不工作(無效的語法),你確定l範圍內(1,i,1)是否與我在l中相同? – outlawoutlawz

相關問題