12,009 views
この記事は最終更新から 1816日 が経過しています。
numpy配列を普通に代入した場合、参照が返される。
すなわち、代入して作った新しい変数は、代入元のオブジェクトを指し示しているだけだ。
このため、一方への変更が他方にも反映される。
>>> import numpy as np >>> a = np.random.randint(1,10,(3,4)) >>> a array([[8, 1, 4, 5], [4, 9, 9, 9], [8, 3, 5, 5]]) >>> >>> b = a >>> b[2,2] = -1 >>> b array([[ 8, 1, 4, 5], [ 4, 9, 9, 9], [ 8, 3, -1, 5]]) >>> a array([[ 8, 1, 4, 5], [ 4, 9, 9, 9], [ 8, 3, -1, 5]])
numpy.copy を使用した場合、別オブジェクトが生成される。
こちらの場合、一方のオブジェクトの変更が他方に反映されない。
>>> a = np.random.randint(1,10,(3,4)) >>> a array([[8, 4, 7, 7], [2, 6, 3, 7], [9, 8, 2, 5]]) >>> >>> c = a.copy() >>> c array([[8, 4, 7, 7], [2, 6, 3, 7], [9, 8, 2, 5]]) >>> c[2,2] = -1 >>> c array([[ 8, 4, 7, 7], [ 2, 6, 3, 7], [ 9, 8, -1, 5]]) >>> a array([[8, 4, 7, 7], [2, 6, 3, 7], [9, 8, 2, 5]])
注意してプログラムを書かないと、データが次々と破壊されて困ることになりそう…