NumPy

【NumPy】配列(ndarray)の形状を変更する方法 reshape

【NumPy】配列(ndarray)の形状を変更する方法 _ reshape _
naoki-hn

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 にて公開しています。参考にしていただければと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました