2

anumpy配列であり、a.T転置です。aa.Tasを追加するとa += a.T、答えは期待されません。理由を教えてもらえますか?ありがとう。

import numpy 

a = numpy.ones((100, 100))
a += a.T
a

array([[ 2.,  2.,  2., ...,  2.,  2.,  2.],
       [ 2.,  2.,  2., ...,  2.,  2.,  2.],
       [ 2.,  2.,  2., ...,  2.,  2.,  2.],
       ..., 
       [ 3.,  3.,  3., ...,  2.,  2.,  2.],
       [ 3.,  3.,  3., ...,  2.,  2.,  2.],
       [ 3.,  3.,  3., ...,  2.,  2.,  2.]])
4

1 に答える 1

8

a.Tは のビューにすぎないことに注意してくださいa。これは、同じデータを保持していることを意味します。今:

 a += a.T

a.Tにその場で追加しaますが、そうしている間に変更されますa.T(a.T同じデータのポイントとして)。アクセスの順序がa少し複雑なため、これは失敗します (また、結果が再現可能であると信頼すべきではありませんnp.setbufsize

それを避けるために、これらの両方が機能しますが、最初のバージョンは私にはきれいに見えます.

a = a + a.T
a += a.T.copy()
于 2012-09-29T18:21:56.457 に答える