【初心者向け】Numpyの関数その2(配列操作)
Pythonの万能ツール!NumPyで配列を自由自在に操ろう!
Pythonのデータ分析に欠かせないNumPy。その中でも、配列操作は基本中の基本でありながら、奥が深い世界です。
「NumPyの配列操作をマスターすれば、データ分析がもっと効率的になるのに...」
そう思っている方も多いのではないでしょうか?
この記事では、NumPy配列の操作の中でも特に重要なものを厳選し、具体的な例を交えながら分かりやすく解説します。
この記事を読めば、NumPy配列の操作がグッと身近になり、データ分析のスキルアップに繋がること間違いなし!
さあ、NumPy配列操作の世界へ飛び込みましょう!
NumPy配列の操作
reshape(): 配列の形状を変更
a = np.array([1, 2, 3, 4])
b = np.array([2, 4, 6, 8, 10, 12, 14,16])
c = b.reshape(2,4)
c
array([[ 2, 4, 6, 8],
[10, 12, 14, 16]])
transpose(): 配列の転置
c.transpose()
array([[ 2, 10],
[ 4, 12],
[ 6, 14],
[ 8, 16]])
転置する関数をもうひとつ
c.T
array([[ 2, 10],
[ 4, 12],
[ 6, 14],
[ 8, 16]])
newaxis(): 次元を追加
f = a[np.newaxis,:]
f
array([[1, 2, 3, 4]])
concatenate(): 配列の結合
d = a.reshape(2,2)
e = b.reshape(4,2)
print(d)
print(e)
np.concatenate([d,e],axis=0) # 行(垂直)方向に連結
[[1 2]
[3 4]]
[[ 2 4]
[ 6 8]
[10 12]
[14 16]]
array([[ 1, 2],
[ 3, 4],
[ 2, 4],
[ 6, 8],
[10, 12],
[14, 16]])
d = a.reshape(2,2)
e = b.reshape(2,4)
print(d)
print(e)
np.concatenate([d,e],axis=1) # 列(水平)方向に連結
[[1 2]
[3 4]]
[[ 2 4 6 8]
[10 12 14 16]]
array([[ 1, 2, 2, 4, 6, 8],
[ 3, 4, 10, 12, 14, 16]])
ちなみに、
g = np.concatenate([a,c],axis=0)
g
とすると以下のエラーが返ってきます。
ValueError Traceback (most recent call last)
Cell In[389], line 1
----> 1 g = np.concatenate([a,c],axis=0)
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s)
これは、aが1次元[1, 2, 3, 4]のため、結合ができなくてエラーになっています。そこで、先ほどの次元の追加(np.newaxis)を利用して行方向の次元を追加してから、結合します。
f = a[np.newaxis,:]
g = np.concatenate([f,c],axis=0)
g
array([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[10, 12, 14, 16]])
これで行(水平)方向に結合ができました。
hstack(): 列(水平)方向に配列を結合
np.hstack([d,e])
array([[ 1, 2, 2, 4, 6, 8],
[ 3, 4, 10, 12, 14, 16]])
vstack(): 行(垂直)方向に配列を結合
np.vstack([f,c])
array([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[10, 12, 14, 16]])
ちなみに、concatenete()の時は新しい次元を追加してからでないと結合できませんでしたが、vstack()では、そのまま結合できます。
np.vstack([a,c])
array([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[10, 12, 14, 16]])
hsplit(): 列(水平)方向に配列を分割
h, i = np.hsplit(g,[3])
print(h)
print(i)
[[ 1 2 3]
[ 2 4 6]
[10 12 14]]
[[ 4]
[ 8]
[16]]
vsplit(): 行(垂直)方向に配列を分割
j, k = np.vsplit(g,[1])
print(j)
print(k)
[[1 2 3 4]]
[[ 2 4 6 8]
[10 12 14 16]]
meshgrid(): 格子状の座標を生成
多次元配列を作成するのに便利な関数です。meshgrid() を使うことで、格子状の座標点を持つ配列を簡単に生成することができます。
# x軸とy軸の範囲を指定
x = np.arange(0, 5)
y = np.arange(0, 3)
print(x),print(y)
# meshgrid() で格子点を作成
X, Y = np.meshgrid(x, y)
# 結果を表示
print("X:\n", X)
print("Y:\n", Y)
[0 1 2 3 4]
[0 1 2]
X:
[[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]]
Y:
[[0 0 0 0 0]
[1 1 1 1 1]
[2 2 2 2 2]]
Discussion