2017-04-17 5 views
0

私はこの配列を持つべきでは異なる結果が得られます。配列に新しい値を設定すると、それは

私が行う場合:私はこのようにそれを変更した場合、

[0,-0.4] 

:しかし

L[1] = L[1] + (-0.6)*L[0] 
print(L) 

それは印刷します。

print(L[1] + (-0.6)*L[0]) 

は、それが私にこの配列を与えます

# [[5 4] [0 0]] 

出力が異なるのはなぜですか?

+0

あなたが上書きしたい 'L'のどの部分? 2列目?希望の出力は何ですか? – m0nhawk

答えて

1

最初の例:

L[1] + (-0.6)*L[0] 

は、指定された操作の結果を返しますが、あなただけの結果を持っているので、それが割り当てられていません。

結果がL[1]に書き込まれ

L[1] = L[1] + (-0.6)*L[0] 

あなたの第二の例では、しかし、結果はLdtypeにキャストされます。これは整数です。したがって、中間結果は単純に切り捨てられます。

この「切り捨ては」結果が「正しい」ではない理由です:

>>> (L[1] + (-0.6)*L[0]).astype(int) # simulating the truncation 
array([0, 0]) 
+0

この場合、キャストルールのために拡張された代入文 'L [1] + = -0.6 * L [0]'は失敗しますが、通常の代入は失敗しません。 – wim

+0

@wim「=」に追加するのを忘れてしまったのかもしれません。あるいは、明示的な「キャスティング」のように感じるかもしれませんし、 '[*] ='は暗黙的なので許可されません。あるいは、 '='はufunc-machinery(これは 'casting ='を指定することができます)を使用していないためです。しかし、それはちょうど推測です、おそらくnumpys問題トラッカーでそれについて質問する価値があります。 – MSeifert

+2

実際には動作が文書化されています。ここに記載されている[警告](https://docs.scipy.org/doc/numpy-1.10.4/reference/arrays.ndarray.html#arithmetic-matrix-multiplication-and-comparison-operations)を参照してください。それにもかかわらず、私は不一致が驚くべき(そして疑わしいデザインの選択)であることを知る。 – wim

関連する問題