15

まず、これら 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 行ずつ全体を貼り付ける必要があります。どうすればこれを回避できますか?

4

6 に答える 6

10

この行の場合

new_x = np.linspace(x.min(), x.max(), new_length)

エラーメッセージを生成しています

AttributeError: 'function' object has no attribute 'min'

thenxは関数であり、関数 (一般に) にはmin属性がないため、 を呼び出すことはできませんsome_function.min()。とはx? コードでは、次のように定義しただけです

x=var

私は何varがわからない。 varは Python のデフォルトのビルトインではありませんが、関数の場合は、何らかの理由で自分で定義したか、どこかから取得したかのいずれかです (Sage を使用している、または次のようなスター インポートを行ったとします)。from sympy import *か何か。)

var[更新: 「PyLab を使用している」と言うので、おそらくnumpy.varIPython の起動時にスコープにインポートされたものです。あなたは本当に「IPythonを--pylabモードで使用する」ことを意味していると思います。]

と も定義x1y1ますが、その後のコードは と を参照するxためy、このコードは 2 つの機能状態の中間にあるように感じます。

numpy配列に.min()and.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
于 2013-04-10T15:55:04.103 に答える
3

2 番目の質問: 一度に複数行のコードを入力するにはどうすればよいですか? 現時点では、全体をコピーして PyLab に貼り付けようとすると、コードの最初の行しか入力されないため、一度に 1 行ずつ全体を貼り付ける必要があります。どうすればこれを回避できますか?

ipythonas またはそれに類するもので呼び出されていると仮定すると、単純magic コマンドipython --pylabを使用できます。別の変数として定義していない場合は、次のように呼び出します。paste%pastepastepaste

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]: 
于 2013-04-10T17:30:22.383 に答える
2

その行を次のように変更します。

new_x = np.linspace(min(x), max(x), new_length)

minmaxはリストの属性ではなく、独自の機能です。

于 2013-04-10T15:43:56.560 に答える
-1

Int には min() 関数はありませんが、min() は組み込み関数です。min(x) を使用する必要があります。

于 2013-04-10T15:46:06.250 に答える