[解決済み] エラー "TypeError: type numpy.ndarray doesn't define __round__ method"
質問
import numpy
......
# Prediction
predictions = model.predict(X_test)
# round predictions
rounded = [round(x) for x in predictions]
print(rounded)
"predictions" is a list of decimals between [0,1] with sigmoid output.
なぜいつもこのエラーを報告するのですか。
File "/home/abigail/workspace/ml/src/network.py", line 41, in <listcomp>
rounded = [round(x) for x in predictions]
TypeError: type numpy.ndarray doesn't define __round__ method
round'を使用しない場合、小数点以下は正しく表示されます。この "round" は Python の組み込み関数であるべきです。なぜnumpyと関係があるのですか?
編集しました。
for x in predictions:
print(x, end=' ')
と出力されます。
[ 0.79361773] [ 0.10443521] [ 0.90862566] [ 0.10312044] [ 0.80714297]
[ 0.23282401] [ 0.1730803] [ 0.55674052] [ 0.94095331] [ 0.11699325]
[ 0.1609294]
解決方法は?
とは何ですか?
model
? どのモジュールから? これは、以下のように見えます。
predictions
は2次元配列です。 とは
predictions.shape
? このエラーでは
x
で
[x for x in predictions]
は配列です。 単一要素の配列であっても、配列であることに変わりはありません。 試しに
[x.shape for x in predictions]
の各要素(行)の形状を見ることができます。
predictions
.
を使う機会はあまりないのですが
round
しかし、明らかにPythonの関数は、そのアクションを
.__round__
メソッドと同じように
+
に委ねる。
__add__
).
In [932]: round?
Docstring:
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
Type: builtin_function_or_method
In [933]: x=12.34
In [934]: x.__round__?
Docstring:
Return the Integral closest to x, rounding half toward even.
When an argument is passed, work like built-in round(x, ndigits).
Type: builtin_function_or_method
In [935]: y=12
In [936]: y.__round__?
Docstring:
Rounding an Integral returns itself.
Rounding with an ndigits argument also returns an integer.
Type: builtin_function_or_method
Python の整数は Python の浮動小数点数と異なる実装になっています。
Pythonのリストと文字列はこれに対する定義を持っていないので
round([1,2,3])
が返されます。
AttributeError: 'list' object has no attribute '__round__'
.
の場合も同様です。
ndarray
. しかし
numpy
が定義されています。
np.round
関数があり、numpy配列には
.round
メソッドを使用します。
In [942]: np.array([1.23,3,34.34]).round()
Out[942]: array([ 1., 3., 34.])
In [943]: np.round(np.array([1.23,3,34.34]))
Out[943]: array([ 1., 3., 34.])
help(np.around)
は、numpyのバージョンに関する最も完全なドキュメントを提供します。
===================
最後のプリントから、あなたの
predictions
としています。
In [955]: arr = np.array([[ 0.79361773], [ 0.10443521], [ 0.90862566]])
In [956]: arr
Out[956]:
array([[ 0.79361773],
[ 0.10443521],
[ 0.90862566]])
In [957]: for x in arr:
...: print(x, end=' ')
...:
[ 0.79361773] [ 0.10443521] [ 0.90862566]
arr.shape
は
(3,1)
- 1列の2次元配列です。
np.round
は正常に動作し、繰り返しは必要ありません。
In [958]: np.round(arr)
Out[958]:
array([[ 1.],
[ 0.],
[ 1.]])
を実行すると、エラーが発生します。
In [959]: [round(x) for x in arr]
TypeError: type numpy.ndarray doesn't define __round__ method
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】TypeError: method()は1つの位置引数を取るが、2つが与えられている
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない