Python Numpy
参照とコピー
参照
a1という配列を作成したのち、a2 = a1 という操作をすると、
a1を参照するオブジェクトa2が作成される。
a2を変更するとa1も変更される。
import numpy as np a1 = np.array([1, 2, 3]) # 参照 a2 = a1 a2[1] = 5 a2 # output -> array([1, 5, 3]) a1 # output -> array([1, 5, 3])
コピー
データのコピーはa3 =a1.copy()
a3を変更してもa1には影響しない。
import numpy as np a1 = np.array([1, 2, 3]) # コピー a3 = a1.copy() a3[0] = 8 a3 # output -> array([8, 2, 3]) a1 # output -> array([1, 2, 3])
参照・・・ravel
import numpy as np b1 = np.array([[1, 2, 3], [4, 5, 6]]) b2 = b1.ravel() b2 # output -> array([1, 2, 3, 4, 5, 6]) b2[0] = 9 b2 # output -> array([9, 2, 3, 4, 5, 6]) b1 # output -> array([[9, 2, 3], [4, 5, 6]])
コピー・・・flatten
import numpy as np b1 = np.array([[1, 2, 3], [4, 5, 6]]) b3 = b1.flatten() # output -> array([1, 2, 3, 4, 5, 6]) b3[5] = 0 b3 # output -> array([1, 2, 3, 4, 5, 0]) b1 # output -> array([[1, 2, 3], [4, 5, 6]])
Python標準のListとNumpy
Python標準のListでスライスするとコピー
list1 = [0, 1] list2 = list1[:] list2[0] = 5 list2 # output -> [5, 1] list1 # output -> [0, 1]
Numpyの配列でスライスすると参照
import numpy as np array1 = np.array([0, 1]) array2 = array1[:] array2[0] = 5 array2 # output -> array([5, 1]) array1 # output -> array([5, 1])