web-dev-qa-db-ja.com

Python 'AttributeError:' function 'オブジェクトには属性' min 'があ​​りません

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

12
Tom Robinson

この行

_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_も定義しますが、その後のコードはxyを参照するため、このコードは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
_
9
DSM

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]: 
3
askewchan

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

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

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

2
Inbar Rose

timezone.now()の代わりにtimezone.nowを呼び出したときに、同様のエラーが発生しました。次に、期待していたDateTime値をフォーマットしようとしました。しかし、それはDateTimeではありません。それは機能でした。これにより、「月」が「関数」の属性ではないというエラーメッセージが表示されました。

修正は、単にnowの後に括弧を追加することでした。これはnow functionオブジェクト自体を返す代わりに、now関数を呼び出し、その結果を返しました。

愚かな間違い、私は知っています。しかし、トラブルシューティングは簡単ではありません。

1
Stephen G Tuggy