配列を形状変換するNumPyのreshapeの使い方2017-05-24配列を形状変換するNumPyのreshapeの使い方NumPy配列にはshapeというプロパティがあり、これは各次元の要素数を表したものです。2次元配列なら(行数、列数)で表すことができます。/features/numpy-shape.html今回は、NumPyの配列のshapeの形状変換をする関数reshapeと、似たような機能を持つresizeについて解説します。形状変換は、あらゆる場面でよく目にする使用頻度の高い機能です。この記事を通して使い方を学ぶと参考になるはずです。reshapeまずは、一般的にもよく使用されるreshapeから解説します。APIドキュメントは以下のようになっています。変換後の配列の形状を指定します。intの場合、指定した要素数分の1次元配列になります。タプルの場合は、変換後のshapeを指定します。(省略可能)初期値’C’指定したモードでインデックスを読み込み、shapeを再整形します。returns:形状変換後のndarrayが返されます。reshapeの引数には、第一引数に変換元になるndarray、第二引数に変換後のarrayの形状(shape)を指定します。最後の3つ目の引数はFortranのような順序の指定をする場合に使われるものであまり使用されません。mの2次元配列となります。このmはもとの配列の要素数に応じて変化する値で、変形後の要素数と変形前の要素数が変化しないような値になります。以下のコードで使い方を確認してみます。1つ1次元配列を生成。3×4の2次元配列に変形。変形ができているか確認。4の多次元配列に変換されました。reshape前のndarrayの要素は、reshape後のndarrayと共有されているので、変換後のある値を変化すると変換前の値も変更になります。1つだけ要素を変更する。aにも変更が反映されている。11])続いて第三引数のorderの使い方を見ていきます。orderを設定することで、並べ替え方を設定できる。'C'はデフォルトで設定されているので、特に変化はない。ここを'F'にすると高い次元のindexがまず変化していくように変形される。11]])変換前の要素数と、変換後の要素数が一致しない場合はValueErrorの例外が発生します。-1を使用すると、元の要素数に合わせて自動で適切な値が設定されます。変形後の配列の`shape`が要素数に合わないとエラーが返ってくる。(mは配列の要素数に合わせた値)の配列を返す。違う値でもやってみる。11]])ndarray.reshapendarrayは、np.reshapeと同様の機能のメソッドを持っています。以下のコードで確認してみます。要素数と出力する配列が異なると、エラーが返る。(3,4)resize続いて、reshapeと同様の機能を持つreshapeを紹介します。APIドキュメントは以下の通りです。変換後の配列のshapeを指定します。intの場合、指定した要素数分の1次元配列になります。タプルの場合は、変換後のshapeを指定します。returns:形状変換後のndarrayが返されます。ほとんどreshapeと変更点はありませんが、こちらは引数にorderがありません。変形後の配列が元の配列の要素数に合致しない時の挙動が異なります。reshapeは元の配列の要素数と合致しないとエラーを返しますが、resizeはそのような処理でもエラーを返さずに強制的に実行します。どのような結果になるのかを確かめるために、以下のコードで確認してみましょう。3×3の2次元配列を生成する。配列のサイズが要素数より大きいと繰り返される。逆に配列のサイズが小さいと、元のデータが使用されない。5]])さらに、reshapeの時には、変換後と変換前の要素は共有されていましたが、resizeは共有されません。処理を実行したあとの配列に値の変更を施しても変換前の配列の要素には変更が反映されません。配列の要素を変更してみる。オリジナルの配列を確かめると、変更が反映されていない。11])ndarray.resizereshapeの時と同様に、resizeも同じ名前のメソッドを持っています。APIドキュメントは以下の通りです。変換後のarrayの形状を指定します。intの場合、指定した要素数分の1次元配列になります。タプルの場合は、変換後のshapeを指定します。(省略可能)初期値TrueFalseなら、参照カウントはチェックされません。returns:形状変換後のndarrayが返されます。numpy.resizeの場合は、変換前と変換後の要素数が違っても強制的に形状変換を試みましたが、こちらはresizeと同様にValueError例外を発生させます。元となる配列を1つ生成。要素数と出力される配列の形と合致しないと、エラーが返ってくる。functionまた、こちらはrefcheckオプションが引数に追加されています。refcheckにFalseを指定すると、先程まで扱っていたresizeと同様に、組み替える前の配列の要素数に関係なく、新しいshapeの配列を出力します。引数であるrefcheckをFalseにしておくと、配列の形に合わせて要素を合わせてくれる。1つ新たに配列を生成。