numpy.reshapeってなんですか?
Ndarray(Numpy配列)を整形する関数だ。
似ているndarray.reshapeとの違いも併せて解説しよう。
✔️ 本記事のテーマ
numpy.reshape関数の使い方
✔️ 読者さんへの前置きメッセージ
本記事は「numpy.reshape関数」について書いています。
この記事を読むことで
「numpy.reshape関数の使い方 と ndarray.reshapeメソッドとの違い」
を理解できます。
Numpyは数値計算に特化したPythonライブラリです。
そして、numpy.reshape関数は、Numpyの配列を整形するときに使用します。
numpy.reshapeとよく似た関数にndarray.reshapeメソッドというものがあります。
ややこしいことに、
numpy.reshape関数とndarray.reshapeメソッドは使い方が微妙に違います。
そこらへんの違いも踏まえて、numpy.reshape関数について解説していきましょう。
なお、numpyのその他の関数については以下の記事でも解説しています。
Numpyとは?
numpyは、Pythonで数値計算をするためのライブラリです。
基本的な計算はPythonだけでも出来ますが、
numpyを使うことで難易度の高い計算や複雑な計算を
簡単にそして高速に行うことができます。
近年、numpyの注目度が高まっている背景には、
機械学習の台頭が挙げられるでしょう。
Python自体、機械学習と関連の高い言語ですが、
numpyライブラリはその便利さから機械学習分野では欠かせないライブラリです。
なお、Numpyついての詳細は
「numpyの使い方と便利な関数」の記事で解説しています。
numpy.reshape関数の使い方
numpy.reshape関数は一言で言うと、
ndarray(Ndarray配列)の形状を変える時に使用します。
numpy.reshape関数の引数などの使い方は以下の通りです。
np.reshape(対象のndarray, 次元をイテレータ形式で指定)
コードで説明しましょう。
以下のような一次元配列があるとします。
import numpy as np
input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# [1 2 3 4 5 6 7 8 9 10 11 12]
この配列を要素をそのままに、
二次元配列に形状を変えるときにnumpy.reshape関数を使用します。
output = np.reshape(input, [2, 6])
print(output)
# [ [1 2 3 4 5 6]
# [7 8 9 10 11 12] ]
このようにnumpy.reshape関数を使うことで、
[1, 12]の一次元配列から[2, 6]の二次元配列へと形状を変化させることができます。
3次元以上の複雑な形状にも変化することももちろんできます。
output = np.reshape(input, [2, 2, 3])
print(output)
# [ [ [1 2 3 ]
# [4 5 6 ] ]
# [ [7 8 9 ]
# [10 11 12 ] ] ]
numpy.reshape関数における引数「-1」
numpy.reshape関数は引数に「-1」を与えることで、
自動的に次元数を計算することができます。
どういうことかコードで解説しましょう。
import numpy as np
input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# [1 2 3 4 5 6 7 8 9 10 11 12]
output_1 = np.reshape(input, [2, -1])
output_2 = np.reshape(input, [2, 2, -1])
print(output_1)
# [ [1 2 3 4 5 6]
# [7 8 9 10 11 12] ]
print(output_2)
# [ [ [1 2 3 ]
# [4 5 6 ] ]
# [ [7 8 9 ]
# [10 11 12 ] ] ]
このように次元数を途中まで指定して最後に「-1」を引数として渡すことで
残りの次元数を自動的に計算してくれます。
上のコード例では、
- 12 = 2 * 6 の「6」
- 12 = 2 * 2 * 3 の「3」
の部分をNumpyライブラリで自動的に計算しています。
ndarray.reshape関数との違い
numpy.reshapeによく似たものとしてndarray.reshapeメソッドがあります。
何が違うのかと言うと、
- numpy.reshapeはnumpyライブラリの関数
- ndarray.reshapeメソッドはndarray(numpy配列)のメソッド
という違いがあります。
この二つは動作としては同じですが、引数の与え方が異なります。
ndarray.reshapeメソッドは以下のように引数を与ええます。
ndarrayオブジェクト.reshape(次元をイテレータ形式で指定)
先ほどと同じようにコード使って説明しましょう。
import numpy as np
input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# [1 2 3 4 5 6 7 8 9 10 11 12]
output = input.reshape([2, 6])
print(output)
# [ [1 2 3 4 5 6]
# [7 8 9 10 11 12] ]
このように、ndarrayオブジェクトのメソッドを使うことで、
numpy.reshape関数と同じようにndarrayの形状を変化させることができます。
なお、ndarray.reshapeメソッドは引数にリストではなく、
次元数を直接指定することもできます。
import numpy as np
input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# [1 2 3 4 5 6 7 8 9 10 11 12]
output = input.reshape(2, 6)
print(output)
# [ [1 2 3 4 5 6]
# [7 8 9 10 11 12] ]
さらに、numpy.reshape関数と同じように引数「-1」を指定することもできます。
import numpy as np
input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# [1 2 3 4 5 6 7 8 9 10 11 12]
output = input.reshape(2, -1)
print(output)
# [ [1 2 3 4 5 6]
# [7 8 9 10 11 12] ]
numpy.reshapeを使う意味とは?
そもそもndarray(Numpy配列)の形状を変化させる意味とは何なのでしょうか?
これはNumpyが数値計算用のライブラリだということが関係してきます。
行列などの複雑な計算においては次元(shape)が非常に重要になってきます。
このような計算を行う場合、計算に使う行列は次元を合わせておく必要があります。
数値計算用ライブラリであるNumpyはこのような行列計算を行う際によく使われるので、numpy.reshape関数を使って、次元数を調整する必要があるのです。
最近では、よく機械学習を行う際に、インプット情報としてndarrayが使用されます。
その際に、正しく学習や予測を行うために、
ndarrayの次元を正しい次元に整形するというユースケースも多く見られます。
NumpyやPythonについてもっとスキルをつけるなら
今回は、Numpyのreshape関数について解説しました。
Numpyは画像認識や機械学習を行う上では、欠かすことのできないライブラリです。
Numpyを実践的に学ぶためには以下の書籍がオススメです。
この書籍はNumPyや高速計算手法についてかなり丁寧に解説されています。
NumPyの基本から始まり、現場で使える実践的な高速データ処理手法について解説します。
Numpy の基礎から実用まで幅広く学びたい方にオススメの書籍です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント