5

x += yこの場合、 がと異なる結果を生成するのはなぜx = x + yですか?

import numpy as np

x = np.repeat([1], 10)
y = np.random.random(len(x))

x += y
print x
# Output: [1 1 1 1 1 1 1 1 1 1]

x = x + y
print x
# Output: [ 1.50859536  1.31434732  1.15147365  1.76979431  1.64727364
#           1.02372535  1.39335253  1.71878847  1.48823703  1.99458116]
4

2 に答える 2

9

リンクされた質問は一般的な問題を説明していますが、この特定のケースにはnumpy固有の説明があります。基本的に、これらの回答は「関連する変数の型に依存する」と述べており、以下に示すのは numpy 型の説明です。

を行うx + yと、numpy は結果に「最小公分母」データ型を使用します。xは int でfloat であるためy、float 配列を返すことを意味します。

しかしx += y、そうすると、 の dtype に準拠するように強制されxますint。これは小数部分を切り捨て、すべてのx値を 1 に戻します。これは、numpy が拡張代入演算子を定義する方法です。戻り値が代入ターゲットと同じ dtype になるように強制します。

実行することにより、2 番目の例から最初の動作を得ることができますx = (x + y).astype(int)(明示的に dtype を int に戻します)。最初の例から 2 番目の動作を得ることができますx = np.repeat([1.0], 10)(float を使用するxと dtype が float になるため、y切り捨てなしで追加できます)。

于 2013-06-21T06:30:23.700 に答える