Numpy配列の次元を削減するsqueeze関数の使い方

まくまく
まくまく
プラグラミング言語「PYTHON」を使ってみよう!!業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。今回はNumpy配列の次元を削減してみようと思います。



Numpyとは?

NumPyは、数値計算を高速に行えるライブラリであり、機械学習やディープラーニングなどの分野でよく利用されています。

配列とは?

NumPyの基本的なデータ構造は、多次元配列になっています。

配列とは複数のデータを並べたものであり、Pythonのリストと同様のイメージを持つと分かりやすいと思います。

リストと異なるのは、配列は同じデータ型しか格納できないのが特徴です。リストのように整数と文字列を同じ配列に格納することはできません。

一次元配列、二次元配列、三次元配列

Numpy特有の配列に馴染みがない方もいると思うので、概要をざっとおさらいしましょう。

x = [1,2,3]

このように1,2,3が横に並んでいるものが一次配列

x = [[1,2,3],[4,5,6]]

2次元配列はXYの2軸です。
エクセルの表で言うと、1,2,3は1行目、4,5,6は2行目に入力されているようなイメージです。

x = [[[1,  2,  3],[4,  5,  6]],[[7,  8,  9],[10, 11, 12]]]

三次元配列は奥行き方向が追加されます。

二次元配列の1から6までの数が記載されたカードと、同じく二次元配列の7から12までの数が記載されたカードが重なっているイメージです。

squeeze関数とは?

squeeze関数を使用することで、次元の大きさが1のものを削減することができます。

次元の大きさ、または次元のサイズとも言われています。

※配列の要素数を示す”サイズ”とは混同しないようにしましょう。

次元のサイズと言っても、直感的に理解し難いところもあると思います。実際にプログラムで確認していきましょう。

3次元配列の次元を削減

a = np.arange(12).reshape(3, 1, 4)
print (a)
b = np.squeeze(a)
print(b)

出力

a = [[[ 0  1  2  3]]
 [[ 4  5  6  7]]
 [[ 8  9 10 11]]]
b = [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

変数 a に3次元配列を作成しました。次元の大きさは奥行きが3、行が1、列が4です。

エクセルで言うと、
sheet1の A1,B1,C1,D1セルに数値が入力されている状態
同じくsheet2とsheet3のA1,B1,C1,D1セルに数値が入力されている状態
これらの3つのsheetは奥行き方向に重なっている。これが三次元配列のイメージです。

squeezeで次元のサイズが1のものを削減します。

ここで言う次元のサイズが1は、”行の1”なので、squeezeによってこの次元のみが削減されます。

2次元配列の次元を削減

二次元で確認すると、さらに分かりやすくなります。

c = np.arange(4).reshape(4, 1)
print (c)
d = np.squeeze(c)
print(d)

行4、列1の二次元配列を処理してみましょう。

squeezeによって、次元の大きさが1の”列1”が削減されたのが分かると思います。

出力

c = [[0]
 [1]
 [2]
 [3]]
d = [0 1 2 3]

created by Rinker
翔泳社

タイトルとURLをコピーしました