概要
ndarray
の2次元配列を1次元化して扱いたいとき(たとえば2次元のAxes配列を一括で扱いたいとき)の方法に、reshape()
メソッド/関数、flatten()
メソッド、ravel()
メソッド/関数を使う方法がある。
以下、次の配列を使う。
1 2 3 4 5 |
a = np.arange(4).reshape(2, 2) print(a) # [[0 1] # [2 3]] |
ndarrayのメソッド
ndarrayのメソッドのreshape()
、flatten()
、ravel()
を使う。戻り値もndarray。
reshape()
メソッド
reshape()
メソッドで1次元化する場合、reshape(-1)
とする。
1 2 3 |
print(a.reshape(-1)) # [0 1 2 3] |
1次元の列ベクトルが必要な場合はreshape(-1, 1)
。
1 2 3 4 5 6 |
print(a.reshape(-1, 1)) # [[0] # [1] # [2] # [3]] |
reshape(1, -1)
とすると1行になるが、次元が2次元であるため、1つの1次元要素配列を要素に持つ2次元配列となってしまう。
1 2 3 |
print(a.reshape(1, -1)) # [[0 1 2 3]] |
flatten()
メソッド
flatten()
メソッドは、reshape(-1)
と同じ効果を持つ。
1 2 3 |
print(a.flatten()) # [0 1 2 3] |
ravel()
メソッド
ravel()
メソッドも、reshape(-1)
と同じ効果を持つ。
1 2 3 |
print(a.ravel()) # [0 1 2 3] |
Numpyの関数
Numpy.reshape()関数、Numpy.ravel()関数は、引数にndarray以外のarray-likeオブジェクトをとることができる。ただし戻り値はndarray。
Numpy.flatten()
は定義されていない。
numpy.reshape()
関数
numpy.reshape()
関数は、第2引数で次元・次数を与える。
1 2 3 |
print(np.reshape(b, -1)) # [0 1 2 3] |
2次元にしたい場合は、第2引数をタプルにする。
1 2 3 4 5 6 7 8 9 10 |
print(np.reshape(b, (1, -1))) # [[0 1 2 3]] print(np.reshape(b, (-1, 1))) # [[0] # [1] # [2] # [3]] |
numpy.ravel()
関数
numpy.ravel()関数の機能はravel()
メソッドと同じ。
1 2 3 |
print(np.ravel(b)) # [0 1 2 3] |
戻り値のビューとコピーの違い
reshape()
とravel()
は可能な限りビューを返す(結果の変更がオリジナルに影響を与える)。
1 2 3 4 5 6 7 8 9 10 11 12 |
a.reshape(-1)[0] = -1 print(a) # [[-1 1] # [ 2 3]] a[0, 0] = 0 a.ravel()[0] = -1 print(a) # [[-1 1] # [ 2 3]] |
flatten()
はコピーを返す(結果の変更はオリジナルに影響しない)。
1 2 3 4 5 |
a.flatten()[0] = -1 print(a) # [[0 1] # [2 3]] |