私はこの配列を持つべきでは異なる結果が得られます。配列に新しい値を設定すると、それは
私が行う場合:私はこのようにそれを変更した場合、
[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,-0.4]
:しかし
L[1] = L[1] + (-0.6)*L[0]
print(L)
それは印刷します。
をprint(L[1] + (-0.6)*L[0])
は、それが私にこの配列を与えます
# [[5 4] [0 0]]
出力が異なるのはなぜですか?
最初の例:
L[1] + (-0.6)*L[0]
は、指定された操作の結果を返しますが、あなただけの結果を持っているので、それが割り当てられていません。
結果がL[1]
に書き込まれ
L[1] = L[1] + (-0.6)*L[0]
あなたの第二の例では、しかし、結果はL
のdtype
にキャストされます。これは整数です。したがって、中間結果は単純に切り捨てられます。
この「切り捨ては」結果が「正しい」ではない理由です:
>>> (L[1] + (-0.6)*L[0]).astype(int) # simulating the truncation
array([0, 0])
この場合、キャストルールのために拡張された代入文 'L [1] + = -0.6 * L [0]'は失敗しますが、通常の代入は失敗しません。 – wim
@wim「=」に追加するのを忘れてしまったのかもしれません。あるいは、明示的な「キャスティング」のように感じるかもしれませんし、 '[*] ='は暗黙的なので許可されません。あるいは、 '='はufunc-machinery(これは 'casting ='を指定することができます)を使用していないためです。しかし、それはちょうど推測です、おそらくnumpys問題トラッカーでそれについて質問する価値があります。 – MSeifert
実際には動作が文書化されています。ここに記載されている[警告](https://docs.scipy.org/doc/numpy-1.10.4/reference/arrays.ndarray.html#arithmetic-matrix-multiplication-and-comparison-operations)を参照してください。それにもかかわらず、私は不一致が驚くべき(そして疑わしいデザインの選択)であることを知る。 – wim
あなたが上書きしたい 'L'のどの部分? 2列目?希望の出力は何ですか? – m0nhawk