def evalPolynomial(coeffs,x):
return sum([n for n in coeffs] * [x**(m-1)for m in range(len(coeffs),0,-1)])
類型錯誤的非INT繁衍序列:不能按類型「列表」無法按類型「列表」
不知道是什麼導致了錯誤的非INT繁衍序列?當我分別打印每個報表時,他們每個人都給我一個列表,但是當我嘗試將它們相乘時,它不起作用。
def evalPolynomial(coeffs,x):
return sum([n for n in coeffs] * [x**(m-1)for m in range(len(coeffs),0,-1)])
類型錯誤的非INT繁衍序列:不能按類型「列表」無法按類型「列表」
不知道是什麼導致了錯誤的非INT繁衍序列?當我分別打印每個報表時,他們每個人都給我一個列表,但是當我嘗試將它們相乘時,它不起作用。
您正試圖將多個兩個列表放在一起。這在Python中不是一個有效的操作。
如果你想乘每個對應的元素在兩個列表,你可以使用這樣的事情:
def evalPolynomial(coeffs,x):
return sum(x * y for x, y in zip(coeffs, (x**(m-1)for m in range(len(coeffs),0,-1))))
明白了 - 謝謝! – user2057593 2013-02-09 20:27:13
的Python list
s只能由整數相乘,在這種情況下list
的元素重複:
>>> [1,2,3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
如果你想矢量操作使用numpy.ndarray
代替:
>>> import numpy as np
>>> ar = np.array([1,2,3])
>>> ar * 3
array([3, 6, 9])
特別是有一個卷積的numpy函數(即,多項式乘法):
>>> a = np.array([1,2,3]) # 1 + 2x + 3x^2
>>> b = np.array([4,5,6]) # 4 + 5x + 6x^2
>>> np.convolve(a, b) # (1 + 2x + 3x^2) * (4 + 5x + 6x^2)
array([ 4, 13, 28, 27, 18]) # 4 + 13x + 28x^2 + 27x^3 + 18x^4
如果你想評價一個多項式存在numpy.polyval
功能,做到這一點。
請記住,使用numpy會限制整數的大小,因此如果係數太大而導致溢出,您可能會得到錯誤的結果。
Python列表可以乘以一個變量。實際上要清楚,我試圖創建一個可變長度的2D列表。我發佈了我的2行代碼片段。 #code def buildAdjMat(matLen): adjMat = [[0] * int(matLen)] * int(matLen) – 2015-03-24 15:22:15
@SteveJobs當我說* integer *我的意思是任何表達式的評估結束於一個值爲類型整數。 – Bakuriu 2015-03-24 15:24:13
表達式[n for n in coeffs]
是整數的list
。
列表支持乘以整數,但這意味着「製作一個列表, 是n個起始列表的副本」;這不是你在這個數學上下文中想要的。
我建議你看看numpy
(或scipy
,它主要是numpy
的超集),以幫助解決這個問題。它有一個功能polyval
用於評估你想要的東西,並且還提供基於類的表示polynomial
。一般來說,爲了在Python中進行數值計算,你應該看看這些包。
但是如果你想推出自己的,你需要做的名單理解裏面的數學, 一個辦法做到這一點是:
return sum([ n*x**(i-1) for (n,i) in zip(coeffs, xrange(len(coeffs),0,-1)) ])
究竟是你想做些什麼? – 2013-02-09 20:16:46
對於列表coeffs和變量x,返回序列a-sub(n)* x ^(n)+ a-sub(n-1)* x ^(n-1)... a- sub(0)* x * 0 – user2057593 2013-02-09 20:18:07
這是多項式估計 – user2057593 2013-02-09 20:19:56