さわやかに

Pythonのことだったり子供のことだったり

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])