2012-04-16 4 views
3

いくつかの実験データを使って、私の人生はスプラップを使ってBスプラインを作成する方法を考えることができません。データはここにある:ここではhttp://ubuntuone.com/4ZFyFCEgyGsAjWNkxMBKWDscipy.interpolate.splrepを使って曲線を補間するにはどうすればよいですか?

は抜粋です。

#Depth Temperature 
1 14.7036 
-0.02 14.6842 
-1.01 14.7317 
-2.01 14.3844 
-3 14.847 
-4.05 14.9585 
-5.03 15.9707 
-5.99 16.0166 
-7.05 16.0147 

、ここでは、yとxの温度に深さと、それをプロットです: enter image description here

ここに私のコードです:

import numpy as np 
from scipy.interpolate import splrep, splev 

tdata = np.genfromtxt('t-data.txt', 
         skip_header=1, delimiter='\t') 
depth = tdata[:, 0] 
temp = tdata[:, 1] 

# Find the B-spline representation of 1-D curve: 
tck = splrep(depth, temp) 
### fails here with "Error on input data" returned. ### 

私は愚かな何かをしているのを知っていますが、私はそれを見ることができません。

答えて

6

最小値から最大値までの値が必要です。別のベンでは問題ではありませんが、将来の読者には注意してください。depth[indices]は、numpy配列ではなく、深さがTypeErrorの場合にスローされます。

>>> indices = np.argsort(depth) 
>>> depth = depth[indices] 
>>> temp = temp[indices] 
>>> splrep(depth, temp) 
(array([-7.05, -7.05, -7.05, -7.05, -5.03, -4.05, -3. , -2.01, -1.01, 
     1. , 1. , 1. , 1. ]), array([ 16.0147 , 15.54473241, 16.90606794, 14.55343229, 
     15.12525673, 14.0717599 , 15.19657895, 14.40437622, 
     14.7036 , 0.  , 0.  , 0.  , 0.  ]), 3) 

代わりに私の醜い「の値をジッパー、ジッパーを並べ替える、値を再割り当て」方式のargsortの提案のための@FerdinandBeyerへの帽子の先端。

+2

データをソートするには、おそらく 'np.argsort()'関数を使うべきです: 'indices = np.argsort(depth);深さ=深さ[インデックス]; temp = temp [インデックス] '。これは、リストのタプルの迂回を保存します。 –

+0

@FerdinandBeyerそれは私よりはるかに良い解決策です!それを今編集する。 –

+0

「depth [indices]」を実行しようとしたときにエラーが発生しましたが、「indexesのi」の「depth [i]」よりも良い方法があれば教えてください。いずれにせよ、それはずっときれいな解決策です、ありがとう。 –

関連する問題