2025.5.30 コピーと参照【numpy】
ravelとflattenはともに多次元配列を1次元に変換する関数である。
ravel は参照を要素とする配列を生成する
flatten はコピーされた値を要素とする配列を生成する
ravel関数
code:ravel01.py
import numpy as np
x_hist = []
x = np.array(1,2],[3,4)
for i in range(3):
x_hist.append(x.ravel())
print('# Before\n', x_hist)
print('# After\n', x_hist)
結果:
code:result1.py
# Before
[array(1, 2, 3, 4), array(1, 2, 3, 4), array(1, 2, 3, 4)] # After
[array(-1, -2, 3, 4), array(-1, -2, 3, 4), array(-1, -2, 3, 4)] ravel が生成した配列は参照であるので、リストや元になった配列の一部に操作を加えると、それを参照している全ての要素に影響が及んでいる。
faltten関数
code:flatten02.py
import numpy as np
x_hist = []
x = np.array(1,2],[3,4)
for i in range(3):
x_hist.append(x.flatten())
print('# Before\n', x_hist)
print('# After\n', x_hist)
結果:
code:result2.oy
# Before
[array(1, 2, 3, 4), array(1, 2, 3, 4), array(1, 2, 3, 4)] # After
[array( 1, -2, 3, 4), array(1, 2, 3, 4), array(1, 2, 3, 4)] flatten は新たな配列要素を生成しているので、一部に操作を加えたとしても他の要素に影響は及ばない。