次回より『ヒデログ』とご検索ください

【Python入門】Numpyのreshapeの(-1)の意味は?例を用いて解説します

ひでひろ
ども、ひでひろ(@hidehirotw)です。Numpyのreshapeの引数に「-1」が入っているときの意味を解説するよ

Numpyのreshapeは次元の変更などに使われます。

ですのでNumpy.reshape(a,(5,2))だと5×2の2次元配列に変更することが分かります。

では、Numpy.reshape(a,(5,-1))の場合はどうか見ていきます。

stackoverflowを参考にしています。

もともとのreshapeの例

a=np.array([1,2,3,4,5,6,7,8])
a=a.reshape(4,2)
print(a)
実行結果
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

このように1×8(ベクトル)が4×2の2次元配列になっていることが分かります。

公式ドキュメント

numpy.reshape(a, newshape, order=’C’)
newshape : int or tuple of ints
The new shape should be compatible with the original shape. If an integer, then the result will be a 1-D array of that length. One shape dimension can be -1. In this case, the value is inferred from the length of the array and remaining dimensions.numpy.reshape-scipy.org

翻訳

新しい形状は、元の形状と互換性がある必要があります。 整数の場合、結果はその長さの1次元配列になります。 1つの形状次元は-1にすることができます。 この場合、値は配列の長さと残りの次元から推測されます。
推測する」ということなので、分かっていなくても自動で処理してくれるということが分かります。この文章だけでは意味を取るのが難しいので、例で見ていきましょう。

reshapeの引数に「-1」がある時の例

import numpy as np
a=np.array([1,2,3,4,5,6,7,8])
b=a.reshape(4,-1)
print(b)
実行結果
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

先ほどの例を使うと(1,8)の配列を(4,x)のxが分からない2次元配列に変更したいと言ことが分かります。この場合、x=2であることが直感的にすぐにわかるかと思います。

もう一つ例を見てみましょう。

import numpy as np
a = np.array([[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12]])
b=a.reshape(-1)
print(b)
実行結果
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

このように「-1」を設定することで形状を推測してくれます。

どういうときに使うの?

例で示したものだと、(1,8)を(4,x)に変更するならx=2になるのは当たり前なので、わざわざ「-1」にする必要はないかと思います。実際に有用な例を見ていきます。

from tensorflow.python.keras.datasets import mnist
(x_train, _), (_, _) = mnist.load_data() 
print(x_train.shape)
x_train = x_train.reshape(-1, 784, 1) 
print(x_train.shape)
実行結果
(60000, 28, 28)
(60000, 784, 1)

このようにデータ数が分からない各データは28×28のデータをフラットにしたい784×1にしたい時、データ数が分からなくても「-1」を設定することで、データ数を自動で推測してくれているのが分かります。

このように、一部の要素が分からない時の形状変更に使用することができます。

まとめ

Numpy.reshapeで引数に「-1」が入っているときの処理がどうなっているか解説しました。引数に「-1」が入っているときは、他の引数(ない場合もある)から形状を推測し、配列を変更することが分かりました。

ひでひろ
「-1」が入っている=形状を推測していると覚えておけばいいね

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です