NumPy Reshape で -1 はどういう意味ですか? 質問する

NumPy Reshape で -1 はどういう意味ですか? 質問する

2D 配列は を使用して 1D 配列に変更できます.reshape(-1)。例:

>>> a = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> a.reshape(-1)
array([[1, 2, 3, 4, 5, 6, 7, 8]])

通常、array[-1]最後の要素を意味します。しかし、ここで -1 はどういう意味でしょうか?

ベストアンサー1

新しい形状を提供するために満たすべき基準は、「新しい形状は元の形状と互換性がある必要がある」ということです。

NumPy では、新しい形状パラメータの 1 つを -1 として指定できます (例: (2,-1) または (-1,3) ですが、(-1, -1) は指定できません)。これは単に、未知の次元であり、NumPy にそれを計算させたいことを意味します。NumPy は、配列の長さと残りの次元を調べて、上記の基準を満たしていることを確認することで、これを計算します。

では例を見てみましょう。

z = np.array([[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12]])
z.shape
(3, 4)

今度は (-1) で形状を変更しようとしています。結果の新しい形状は (12,) となり、元の形状 (3,4) と互換性があります。

z.reshape(-1)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

ここで (-1, 1) で形状を変更しようとしています。列は 1 として指定しましたが、行は不明です。そのため、結果として新しい形状は (12, 1) になります。これも元の形状 (3,4) と互換性があります。

z.reshape(-1,1)
array([[ 1],
   [ 2],
   [ 3],
   [ 4],
   [ 5],
   [ 6],
   [ 7],
   [ 8],
   [ 9],
   [10],
   [11],
   [12]])

上記は、単一の機能、つまり単一の列にnumpy使用するためのアドバイス/エラーメッセージと一致しています。reshape(-1,1)

array.reshape(-1, 1)データに単一の特徴がある場合は、データの形状を変更します。

新しい形状は (-1, 2) です。行は不明、列は 2 です。結果として新しい形状は (6, 2) になります。

z.reshape(-1, 2)
array([[ 1,  2],
   [ 3,  4],
   [ 5,  6],
   [ 7,  8],
   [ 9, 10],
   [11, 12]])

列を不明のままにしておきます。新しい形状は (1,-1) です。つまり、行は 1、列は不明です。結果として、新しい形状は (1, 12) になります。

z.reshape(1,-1)
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]])

上記は、単一のサンプル、つまり単一の行にnumpy使用するためのアドバイス/エラーメッセージと一致しています。reshape(1,-1)

単一のサンプルarray.reshape(1, -1)が含まれている場合は、データを再形成します。

新しい形状 (2, -1)。行 2、列は不明です。結果として新しい形状 (2,6) が得られます。

z.reshape(2, -1)
array([[ 1,  2,  3,  4,  5,  6],
   [ 7,  8,  9, 10, 11, 12]])

新しい形状は (3, -1) です。行 3、列は不明です。結果として新しい形状は (3,4) になります。

z.reshape(3, -1)
array([[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12]])

そして最後に、両方の次元を不明として、つまり新しい形状を(-1,-1)として提供しようとすると、エラーが発生します。

z.reshape(-1, -1)
ValueError: can only specify one unknown dimension

おすすめ記事