1
我一直試圖讓numpy.piecewise將一系列{a_ij}轉換成分段三次多項式。每當我運行下面的代碼,np.piecewise()使用math.pow()進行動作?
import math
import numpy as np
x = np.linspace(0.1,9.9,100)
a = [[i] * 4 for i in range(10)]
x_i = [0,1,2,3,4,5,6,7,8,9,10]
condlist = [(x[i] < x)*(x<x_i[i+1]) for i in range(len(x_i)-1)]
funclist = [lambda y: sum([a[k][j] * math.pow(y - x_i[k],j) for j in range(4)]) for k in range(len(a))]
print np.piecewise(x, condlist, funclist)
我得到的錯誤
...line 730, in piecewise
y[condlist[k]] = item(vals, *args, **kw)
File "test", line 8, in <lambda>
funclist = [lambda y: sum([a[k][j] * math.pow(y - x_i[k],j) for j in range(4)]) for k in range(len(a))]
TypeError: only length-1 arrays can be converted to Python scalars
錯誤消失,但是,當且僅當我擺脫math.pow的()。出於某種原因,funclist將x傳遞給math.pow()會破壞一切。
發生了什麼事?我怎樣才能解決這個問題?
一般來說,您不應該將'numpy'與Python的內置函數混合使用,因爲它們不是爲了配合而構建的。你正在使用np.linspace和np.piecewise以及Python的sum,math.pow和list。我不確定究竟是什麼破壞了你的代碼,但我非常肯定這是由於這個原因造成的。 – Frxstrem