アルバイト募集2017-05-26配列末尾へ要素を追加するNumPyのappendの使い方Tweetnp.appendparams:returns:速度比較Pythonのlistはappendメソッドを使用すると、末尾に要素を追加することができます。以下のようにlistのメソッドで使用することができます。2]また、Pythonのlistにはextendというメソッドもありました。extendは引数に配列を指定すると、元のリストに指定した配列の要素がマージされます。6]一方で、NumPyにもnp.appendという同じ名前の関数が備わっていますが、その挙動は引数の指定が配列でなければならないという面において、どちらかというとextendに近いものです。要素のコピーが発生するので、思ったよりも遅く、混乱しやすいのでコードを読む際にも書く際にも注意が必要になります。np.appendnp.appendは、配列の末尾に要素を追加した新しい配列を生成する関数です。APIドキュメントは以下のようになっています。要素を追加される配列を指定します。追加する要素または配列を指定します。(省略可能)初期値Noneここで指定した軸パラメータに沿ってappend演算を適用します。returns:要素が追加されたndarrayが返されます。np.appendの引数には、第一引数として元の配列、第二引数として追加する要素の配列、第三引数に配列として要素を追加する軸パラメータを指定できます。第三引数を指定しないと第一、第二引数で指定された配列のshapeとは関係なく一次元配列が生成されます。以下のコードで確認してみましょう。aの末尾に要素を追加。axisを指定しないと一次元配列が返ってくる。4])第三引数のaxisを指定した場合、指定した軸方向に沿って要素が追加されます。追加前の配列と追加後の配列のshapeが一致していないとエラーが発生します。dimensionsさらにaxisの使い方を見ていきます。今度はcと同じ`shape`の配列を生成。axisに1を指定すると列方向に要素が追加される。]])速度比較NumPyのndarrayは多次元配列を扱うことを目的としたクラスで、事前にメモリ確保しています。np.append関数を使用すると、元のshapeが破壊されてしまうため、要素のコピーが発生して遅くなることがあります。一方で、Pythonのlistは可変長の要素を保持するベクタ型です。大きめの要素を事前に確保するので、毎回のコピーは発生しません。同様のコードを書いて、Pythonのリストと速度比較してみます。loop実行速度は、Pythonのlistの方が高速になります。データ構造を意識したコードを心がけると、何倍も高速にすることができ、ソースコードの効率化の見直しになるはずです。次の記事NumPyのall関数とany関数の使い方DeepAgeではAIに関する厳選した内容を記事にしてお届けします。