第一に、これら2つの質問がいかに明白であるかの謝罪。私はこれに非常に新しくて、私がしていることの手がかりを持っていません。
私は値の配列にスプライン補間のためのScipy関数を適用するために何かを書こうとしています。現在、私のコードは次のようになっています。
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d
x=var
x1 = ([0.1,0.3,0.4])
y1 = [0.2,0.5,0.6]
new_length = 25
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
しかし、それが行に到達したとき
new_x = np.linspace(x.min(), x.max(), new_length)
次のエラーが表示されます。
AttributeError: 'function' object has no attribute 'min'
そして、これまでのところグーグルなどは私が理解していることを何も示していません。これはどういう意味ですか、どうすれば修正できますか?
2番目の質問:一度に複数行のコードを入力するにはどうすればよいですか?現時点では、すべてをコピーしてPyLabに貼り付けようとすると、コードの先頭行のみが入力されるため、一度に1行ずつすべてを貼り付ける必要があります。どうすればこれを回避できますか?
この行
_new_x = np.linspace(x.min(), x.max(), new_length)
_
エラーメッセージを生成しています
_AttributeError: 'function' object has no attribute 'min'
_
x
は関数であり、関数(一般的に)にはmin
属性がないため、some_function.min()
を呼び出すことはできません。 x
とは何ですか?コードでは、次のように定義しただけです。
_x=var
_
var
が何なのかわかりません。 var
はPythonのデフォルトのビルトインではありませんが、関数の場合は、何らかの理由で自分で定義したか、どこかから選択した(Sageを使用している、または_from sympy import *
_または何かのようなスターインポートを行いました。)
[更新:「PyLabを使用している」と言うので、おそらくvar
は_numpy.var
_であり、IPythonの起動時にスコープにインポートされています。あなたは本当に「_--pylab
_モードでIPythonを使用すること」を意味すると思います。
_x1
_と_y1
_も定義しますが、その後のコードはx
とy
を参照するため、このコードは2つの機能状態の中間にあるように感じられます。
numpy
配列doには.min()
および.max()
メソッドがあるため、次のようにします。
_>>> x = np.array([0.1, 0.3, 0.4, 0.7])
>>> y = np.array([0.2, 0.5, 0.6, 0.9])
>>> new_length = 25
>>> new_x = np.linspace(x.min(), x.max(), new_length)
>>> new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
_
動作します。補間には少なくとも4つのポイントが必要なので、テストデータは得られません。
_ValueError: x and y arrays must have at least 4 entries
_
2番目の質問:一度に複数行のコードを入力するにはどうすればよいですか?現時点では、すべてをコピーしてPyLabに貼り付けようとすると、コードの先頭行のみが入力されるため、一度に1行ずつすべてを貼り付ける必要があります。どうすればこれを回避できますか?
ipython
にいると仮定して、ipython --pylab
または類似のものであれば、単純に paste
マジックコマンド を使用できます。 %paste
またはpaste
を別の変数として定義していない場合は、単にpaste
:
In [8]: paste
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d
x=var
x1 = ([0.1,0.3,0.4])
y1 = [0.2,0.5,0.6]
new_length = 25
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
## -- End pasted text --
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-8-b4e41f59d719> in <module>()
3 from scipy.interpolate import interp1d
4
----> 5 x=var
6 x1 = ([0.1,0.3,0.4])
7 y1 = [0.2,0.5,0.6]
NameError: name 'var' is not defined
In [9]:
その行を次のように変更します。
new_x = np.linspace(min(x), max(x), new_length)
min
とmax
はリストの属性ではなく、独自の関数です。
timezone.now()
の代わりにtimezone.now
を呼び出したときに、同様のエラーが発生しました。次に、期待していたDateTime
値をフォーマットしようとしました。しかし、それはDateTime
ではありません。それは機能でした。これにより、「月」が「関数」の属性ではないというエラーメッセージが表示されました。
修正は、単にnow
の後に括弧を追加することでした。これはnow function
オブジェクト自体を返す代わりに、now
関数を呼び出し、その結果を返しました。
愚かな間違い、私は知っています。しかし、トラブルシューティングは簡単ではありません。