2017-02-17 9 views
0

私のコードでは、私が悩まされているという奇妙な挙動を観察してきました。次...Compressed Sparse Row Matrix :: csr_matrix :: odd behavior

from scipy.sparse import csr_matrix 
A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]]) 
B = A 
B[0,0] = 99 

私は(ノー更新99値で)元の行列を返すようにA.toarray()を期待する、しかし私は実際に取得し、この

A.toarray() 

Out: 
array([[99, 2, 0], 
     [ 0, 0, 3], 
     [ 4, 0, 5]], dtype=int32) 

何が起こっているの?

+1

「A」と「B」はメモリ内の同じオブジェクトへのポインタです。 'A is B'はTrueを返します。オブジェクトのメモリアドレスを取得するには、 'id(obj)'メソッドを使用します。 'id(A)'と 'id(B)'の結果は同じでなければなりません。 – Jakub

+1

これは、Aが疎な行列ではないと思われます。どのようなコンテナタイプでもこの動作が見えます。 B = Aは同じオブジェクトへの参照をBに代入します。これらはインプレースで変更されているため、ここではB [0,0] =とA [0,0] =は全く同じです。 –

+0

thanks chaps .... –

答えて

2

ステートメントb = abと同じ参照番号aを示します。

つまり、両方ともメモリ内の同じオブジェクトを参照します。

変更は、明らかに同じであり、同じであるため、他のものに反映されます。

代わりにb=a.copy()を使用してください。これはaのコピーbに渡されます。

関連する問題