この記事では、既存の配列に別の配列を挿入できる
numpyのnp.insertについて解説しています。
解説するうえで、何か題材があったほうがわかりやすいと思いますので、今回は以下の画像のように既存の配列に、3層の0の配列を追加していきたいと思います。
(画像の外枠に真っ黒い領域を追加する際に使えそうですね。)
初心者向けにコードの詳細解説も行っていますので、ぜひ最後までご覧ください。
それでは早速やっていきます!
np.insertの使い方
numpyで行or列を追加するためには、np.insertというスキルを活用します。
np.insertの基本的な使い方は以下の通りです。
◆np.insertの使い方
変数=np.insert(A,B,C,D)
〇変数:処理後の配列の名前
〇A:処理対象となる配列名
〇B:何行目(何列目)に追加するか
〇C:どんな数値(配列)を追加するか
〇D:0 or 1 ⇒0:行を追加 1:列を追加
※Bで指定する行(列)は一行目を0として考えますのでご注意ください。
とはいえ、これだけではイメージがわかないと思いますので、実際の使用例を見ていきましょう。
np.insertの使用例
先ほどご紹介したnp.insertスキルを使い、冒頭に説明した既存の配列の外周部分に3層の0を追加するということをやってみようと思います。
まずは実際の実行コードをご覧ください。
import numpy as np
array_initial=np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8]])
print("加工前の配列")
print(array_initial)
array_ins1=np.zeros((3,array_initial.shape[1]),np.uint8)
array_process=np.insert(array_initial, 0, array_ins1, 0)
array_process=np.insert(array_process, array_process.shape[0], array_ins1, 0)
print("加工途中の配列")
print(array_process)
array_ins2=np.zeros((array_process.shape[0],3),np.uint8)
array_process=np.insert(array_process, [0], array_ins2, 1)
array_process=np.insert(array_process, [array_process.shape[1]], array_ins2, 1)
print("加工後の配列")
print(array_process)
このコードをanaconda_promptで実行してみましょう。
以下の結果が得られました。
しっかりと既存の配列に0が3層追加されていますね。
サンプルコートが動くことが確認できたので、次はこのコードのひとつひとつの要素を解説していきたいと思います。
サンプルコードの解説
先ほど紹介したコードをざっくりと絵で説明すると以下のようになります。
ざっくりイメージがつかめたところで詳細解説に移ります。
⓪ベースとなる配列の準備
まずは
array_initial=np.array([[1,2,3,4]・・・
の部分でベースとなる配列を準備しています。
(ここは今回の本題とは関係ないのでスルーします。)
①配列の上下に挿入する配列を準備
次に
array_ins1=np.zeros….
の部分についてです。
ここでは縦が3行、横が既存の配列(⓪で作ったもの)と同じ列数という大きさで、すべての要素に0が入っている行列を作成しています。
要は既存の配列の上下にこいつを追加することで、外周部分の上側、下側を完成させようというわけです。
②np.insertで既存の配列に別の配列を追加(上側)
次がいよいよこの記事の本題であるnp.insertを使う部分です。
array_process=np.insert(array_initial, 0, array_ins1, 0)
この一文を下のnp.insertの使い方に当てはめて説明すると、
◆array_initialという⓪で作った配列の
◆0番目の要素に対して
◆array_ins1という②で作った配列を
◆行方向に追加する
ということをやっています。
◆np.insertの使い方
変数=np.insert(A,B,C,D)
〇変数:処理後の配列の名前
〇A:処理対象となる配列名
〇B:何行目(何列目)に追加するか
〇C:どんな数値(配列)を追加するか
〇D:0 or 1 ⇒0:行を追加 1:列を追加
③np.insertで既存の配列に別の配列を追加(下側)
ここも先ほどの②とほぼ同じです。
array_process=np.insert(array_process, array_process.shape[0], array_ins1, 0)
先ほどの上側だと追加する行指定を0にして一番上側に新たな配列を追加する処理を行いましたが、ここでは、array_process.shape[0]とすることで最終行を指定しています。
④配列の左右に挿入する配列を準備
array_ins2=np.zeros….
ここでは縦が③までに作った配列と同じ行数、横が3列という大きさで、すべての要素に0が入っている行列を作成しています。
要は③で作った配列の左右にこいつを追加することで、外周部分の左側、右側を完成させようというわけです。
⑤np.insertで既存の配列に別の配列を追加(左側)
array_process=np.insert(array_process, [0], array_ins2, 1)
ここでもnp.insertを使って④で作った配列を追加しています。
基本的には②、③の部分から挿入する配列を変え、最後の引数を1にすることで、列方向に配列を追加するようにしています。
また、ひとつだけ注意点があります。
列方向に配列を追加する際は、追加する場所を示す2番目の引数を[]で囲ってあげる必要があります。
(私自身、なんでやねん!ってちょっと思っていますが、pythonの仕様上そうなっているので、まぁそうゆうルールだと思って受け流すしかないですね。)
⑥np.insertで既存の配列に別の配列を追加(右側)
ここも上の⑤とほぼ同じですね。
array_process=np.insert(array_process, [array_process.shape[1]], array_ins2, 1)
ここまでに出てきたことを応用しているだけですので、なんとなくやっていることは理解していただけると思います。
というわけで、サンプルコートの解説はここまでです。
とはいえ、一度読んだだけですべてを理解しきるのは難しいと思います。
プログラミングを習得するには実際に動かしてみるのが一番です。
ぜひこの記事で紹介したサンプルコートをコピー&修正して挙動を確認してみてください。
きっと理解が深まるはずです。
おわりに
というわけで今回はpythonのnumpyを使って、既存の配列に別の配列を挿入する方法をご紹介しました。
この記事の内容以外にもさまざまな応用ができますので、ぜひあなたも自分で手を動かして実践してみましょう!
このように私のブログでは様々なプログラミングスキルを紹介しています。
・もっと革新的なことをやりたい。
・プログラミングについてもっと詳しくなりたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント