numpy.insert()

numpy.insert()

numpy.insert()

 numpy.insert() は指定した位置に配列や数値を挿入する関数です。

 numpy.insert(arr, obj, values, axis=None)

 arr:配列、リスト、数値など
 obj:インデクスを指定するオブジェクト
 values:挿入する配列、リスト、数値など
 axis:挿入する軸

1次元配列に挿入

 最初に簡単な例として、1 次元配列に数値を挿入してみます。

# リストIST01-1

import numpy as np

# [1 2 3 4 5]
x = np.arange(1, 6)

# インデクス2の位置に0を挿入
a = np.insert(x, 2, 0)

print(a)
[1 2 0 3 4 5]

 複数のインデクスを指定して挿入することもできます。

# リストIST01-2

# インデクス1とインデクス3の位置に0を挿入
b = np.insert(x, [1, 3], 0)

print(b)
[1 0 2 3 0 4 5]

 

2次元配列に挿入

 arr が 2 次元配列のときに、axis を指定しないと 1 次元配列にフラット化されます。

# リストIST02-1

import numpy as np

# [[1 2]
#  [3 4]
#  [5 6]]
y = np.arange(1, 7).reshape(3, 2)

# yを1次元にフラット化して、インデクス4の位置に0を挿入
c = np.insert(y, 4, 0)

print(c)
[1 2 3 4 0 5 6]

 axis=0 を指定すると、ブロードキャストが適用されて (配列サイズに合うように引き伸ばされて) 行に挿入されます。

# リストIST02-2

# yの2行目に0を挿入
d = np.insert(y, 1, 0, axis=0)

print(d)
[[1 2]
 [0 0]
 [3 4]
 [5 6]]

 axis=1 を指定すると、縦に引き伸ばされて列に挿入されます。

# リストIS02-3

# yの2列目に0を挿入
e = np.insert(y, 1, 0, axis=1)

print(e)
[[1 0 2]
 [3 0 4]
 [5 0 6]]

 2 次元配列に 1 次元配列を挿入する場合も、適切なサイズに変更されてから挿入が実行されます。

# リストIST02-4

# yの2列目に[0,9]を挿入
f = np.insert(y, 1, [[0], [9]], axis=1)

print(f)
[[1 0 9 2]
 [3 0 9 4]
 [5 0 9 6]]

 次のコードは 2 次元配列の中に 2 次元配列を挿入します。

# リストIST03-1

import numpy as np

# 2次元配列を定義
z = np.array([[0, 0],
              [9, 9]])

# yの2行目にzを挿入
g = np.insert(y, 1, z, axis=0)

print(g)
[[1 2]
 [0 0]
 [9 9]
 [3 4]
 [5 6]]

 上のコードで obj に複数インデクスを渡すと、values に渡した配列は行ごとに分解されます。

# リストIST03-2

# yの1行目にzの1行目を、yの3行目にzの2行目を挿入
h = np.insert(y, [0, 2], z, axis=0)

print(h)
[[0 0]
 [1 2]
 [3 4]
 [9 9]
 [5 6]]

 

3次元配列に挿入

 最後に arr に 3 次元配列を渡す例を見てみます。

# リストIST04-1

import numpy as np

# 3次元配列を定義
w = np.array([[[1,  2],[ 3,  4]],
              [[5,  6],[ 7,  8]],
              [[9, 10],[11, 12]]])

print(w)
[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]]

 配列 w に 0 を埋め込んでみます。axis は 0, 1, 2 の 3 種類を指定できます。axis=2 を指定した場合は次のような結果となります。

# リストIST04-2

# wの第2軸に0を挿入
i = np.insert(w, 2, 0, axis=2)

print(i)
[[[ 1  2  0]
  [ 3  4  0]]

 [[ 5  6  0]
  [ 7  8  0]]

 [[ 9 10  0]
  [11 12  0]]]