【NumPy】配列(ndarray)の形状を変更する方法 reshape
の形状を変更する方法-_-reshape-_.jpg)
NumPy の配列(ndarray)の形状を変更する方法を解説します。
目次
配列(ndarray)の形状を変更する方法 reshape
NumPy の配列(ndarray)の形状を変更するには、reshape メソッドを使用します。
この記事では、NumPy の配列(ndarray)の形状を変更する方法を紹介します。
1 次元配列から多次元配列を作成する
reshape による形状の変更でよくある例は、1 次元配列を作成し、その後に 2 次元配列といった多次元配列に変換する場合です。
1 次元の配列から 2 次元配列を reshape を使って作成するには以下のようにします。
import numpy as np
x = np.arange(1, 10).reshape((3, 3))
print(x)
print(f'size: {x.size}')
print(f'shape: {x.shape}')【実行結果】 [[1 2 3] [4 5 6] [7 8 9]] size: 9 shape: (3, 3)
例では、arange により 9 個の要素を持つ 1 次元配列を作成し、reshape で形状を変更しています。reshape の引数には形状をタプルで指定します。例では (3, 3) といった形で指定することで 3 x 3 の配列に変更をしています。
3 次元配列を作成する場合も同様です。
import numpy as np
x = np.arange(1, 28).reshape((3, 3, 3))
print(x)
print(f'size: {x.size}')
print(f'shape: {x.shape}')【実行結果】 [[[ 1 2 3] [ 4 5 6] [ 7 8 9]] [[10 11 12] [13 14 15] [16 17 18]] [[19 20 21] [22 23 24] [25 26 27]]] size: 27 shape: (3, 3, 3)
例では、3 x 3 x 3 の 3 次元配列になります。n 次元になっても同様ですが表示しても分かりにくいので 3 次元までの紹介にしておきます。
reshape では、変換元の配列サイズと変換後の配列のサイズは一致している必要があるので注意してください。必要があれば ndarray の属性である size を使って確認してください。
行ベクトルを作成する
配列の形状を変更したいもう 1 つのケースとして、行ベクトルを作成する場合があります。行ベクトルを作成する方法としては、reshape を使用する方法と、np.newaxis を使用する方法をそれぞれ紹介します。
reshape を使用する方法
reshape を用いて行ベクトルを作成するには、引数に (1, size) のタプルを指定します。ここでの size は元の入力配列のサイズです。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(f'x = {x}')
# 行ベクトルを作成する
x_row = x.reshape((1, x.size))
print(f'x_row = {x_row}')【実行結果】 x = [1 2 3 4 5] x_row = [[1 2 3 4 5]]
np.newaxis を使用する方法
reshape の他にも、np.newaxis を使用する方法があります。この場合は、x[np.newaxis, :] のように指定します。ここで x は元の配列です。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(f'x = {x}')
# 行ベクトルを作成する
x_row = x[np.newaxis, :]
print(f'x_row = {x_row}')【実行結果】 x = [1 2 3 4 5] x_row = [[1 2 3 4 5]]
列ベクトルを作成する
列ベクトルも同様に、rehape または np.newaxis を使用して作成できます。
reshape を使用する方法
reshape を用いて列ベクトルを作成するには、引数に (size, 1) を指定します。ここでの size は元の入力配列のサイズです。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(f'x = {x}')
# 列ベクトルを作成する
x_col = x.reshape((x.size, 1))
print(f'x_col = \n{x_col}')【実行結果】 x = [1 2 3 4 5] x_col = [[1] [2] [3] [4] [5]]
np.newaxis を使用する方法
np.newaxis を使用する場合には、x[:, np.newaxis] のように指定します。ここで x は元の配列です。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(f'x = {x}')
# 列ベクトルを作成する
x_col = x[:, np.newaxis]
print(f'x_col = \n{x_col}')【実行結果】 x = [1 2 3 4 5] x_col = [[1] [2] [3] [4] [5]]
まとめ
NumPy の配列(ndarray)の形状を変更する方法を解説しました。
reshape を使うことで配列(ndarray)の形状を簡単に変更することができます。この記事では、1 次元配列から 多次元配列に形状を変える方法や行ベクトルや列ベクトルを作成する方法を紹介しました。行ベクトル、列ベクトルの例では、np.newaxis での方法も紹介しています。
配列の形状変更は、機械学習等の前の事前処理としてよく実行しますので、うまく使いこなせるようになってもらえたらと思います。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。


の属性情報の確認方法-_-dtype-size-shape-ndim-itemsize-nbytes-_.jpg)

の作成方法-_array-zeros-ones-full-arange-random-randint-randn-normal-linspace-eye-empty_.jpg)
を用いた配列(ndarray)の計算.jpg)
の要素を参照する方法.jpg)
をソートする方法-_-sort-argsort-_-1.jpg)