numpy.insert()
numpy.insert() は指定した位置に配列や数値を挿入する関数です。
numpy.insert(arr, obj, values, axis=None)
arr に配列、obj にインデックス、values に挿入する値を渡します。
最初に簡単な例として、1 次元配列に数値を挿入してみます。
# NUMPY_INSERT_01
# In[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]
複数のインデクスを指定して挿入することもできます。
# In[2]
# インデクス1とインデクス3の位置に0を挿入
b = np.insert(x, [1, 3], 0)
print(b)
[1 0 2 3 0 4 5]
arr が 2 次元配列のときに、axis を指定しないと 1 次元配列にフラット化されます。
# In[3]
# [[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 を指定すると、ブロードキャストが適用されて (配列サイズに合うように引き伸ばされて) 行に挿入されます。
# In[4]
# yの2行目に0を挿入
d = np.insert(y, 1, 0, axis=0)
print(d)
[[1 2] [0 0] [3 4] [5 6]]
axis=1 を指定すると、縦に引き伸ばされて列に挿入されます。
# In[5]
# yの2列目に0を挿入
e = np.insert(y, 1, 0, axis=1)
print(e)
[[1 0 2] [3 0 4] [5 0 6]]
2 次元配列に 1 次元配列を挿入する場合も、適切なサイズに変更されてから挿入が実行されます。
# In[6]
# 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 次元配列を挿入します。
# In[7]
# 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 に渡した配列は行ごとに分解されます。
# In[8]
# 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]]
最後に arr に 3 次元配列を渡す例を見てみます。
# In[9]
# 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 を指定した場合は次のような結果となります。
# In[10]
# 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]]]
コメントを書く