如蟒蛇初學者,我開始實施一個想法,我已經在Matlab中實現。我想確定數組的交點(x,y座標),而沒有給出明確的函數。也就是說,只有int值的數組可能與浮點座標有交點。因此,www提供了以下代碼,請參閱附件。np.array路口// AttributeError的:「模塊」對象有沒有屬性「PiecewisePolynomial」
通過PIP scipy
和interpolate
安裝後,我解決不了即將到來的
ERROR: AttributeError: 'module' object has no attribute 'PiecewisePolynomial'.
搜索功能並沒有幫助。
我將非常高興通過
- 接收一些幫助解決該ERROR
或/和
- 不同計算交點(是SciPy的唯一的方式)
PS:計算經由d的交點MATLAB的。差分不是權宜之計,由於路口的一些間隔
import scipy.interpolate as interpolate
import scipy.optimize as optimize
import numpy as np
x1=np.array([1.4,2.1,3,5.9,8,9,23])
y1=np.array([2.3,3.1,1,3.9,8,9,11])
x2=np.array([1,2,3,4,6,8,9])
y2=np.array([4,12,7,1,6.3,8.5,12])
p1 = interpolate.PiecewisePolynomial(x1,y1[:,np.newaxis])
p2 = interpolate.PiecewisePolynomial(x2,y2[:,np.newaxis])
def pdiff(x):
return p1(x)-p2(x)
xs=np.r_[x1,x2]
xs.sort()
x_min=xs.min()
x_max=xs.max()
x_mid=xs[:-1]+np.diff(xs)/2
roots=set()
for val in x_mid:
root,infodict,ier,mesg = optimize.fsolve(pdiff,val,full_output=True)
# ier==1 indicates a root has been found
if ier==1 and x_min<root<x_max:
roots.add(root[0])
roots=list(roots)
print(np.column_stack((roots,p1(roots),p2(roots))))
較新版本的scipy似乎沒有這種方法,['PPoly'](https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.interpolate.PPoly。 html#scipy.interpolate.PPoly)似乎是可用的(它具有不同的語法和語義)。 –
你明白錯誤在告訴你什麼嗎? – wwii
你是說你在網上找到了一些代碼,你不知道它是如何工作的? – wwii