Pythonで数値計算やデータ処理を行う際によく使われる NumPy。
この記事では、NumPyで使う「配列の連結・分割・変形」について、実行例と出力をセットでわかりやすく解説します。
目次
-
np.diff()
:差分を求める -
np.concatenate()
:配列の連結(axis指定) -
np.vstack()
/np.hstack()
:縦・横方向の連結 -
np.vsplit()
/np.hsplit()
:縦・横方向の分割 -
.T
属性:転置(行と列の入れ替え) -
np.newaxis
:次元の追加 -
np.meshgrid()
:グリッドデータの生成(2次元座標データ)
1. np.diff()
:差分を求める
配列内の要素同士の差を求める関数です。
import numpy as np
a = np.array([10, 12, 15, 20])
print(np.diff(a))
出力:
[2 3 5]
差分を2回繰り返すこともできます。
print(np.diff(a, n=2))
出力:
[1 2]
2. np.concatenate()
:配列の連結(axis指定)
複数の配列を結合して1つの配列にします。
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
# axis=0:行方向(縦)に連結
print(np.concatenate((a, b), axis=0))
出力:
[[1 2]
[3 4]
[5 6]]
c = np.array([[5], [6]])
# axis=1:列方向(横)に連結
print(np.concatenate((a, c), axis=1))
出力:
[[1 2 5]
[3 4 6]]
3. np.vstack()
/ np.hstack()
:縦・横方向の連結
より簡単に縦・横に連結できる便利な関数です。
💡 補足:vとhの意味
v
= vertical(バーティカル)→「縦方向(行方向)」h
= horizontal(ホリゾンタル)→「横方向(列方向)」
a = np.array([1, 2])
b = np.array([3, 4])
print(np.vstack((a, b))) # 縦方向に連結
出力:
[[1 2]
[3 4]]
print(np.hstack((a, b))) # 横方向に連結
出力:
[1 2 3 4]
4. np.vsplit()
/ np.hsplit()
:縦・横方向の分割
2次元配列を行・列方向に分割します。
💡
vsplit
は vertical(行方向)に分割、
hsplit
は horizontal(列方向)に分割します。
a = np.arange(12).reshape(4, 3)
print(a)
出力:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
# 縦に2分割(行を分割)
print(np.vsplit(a, 2))
出力:
[array([[0, 1, 2],
[3, 4, 5]]),
array([[ 6, 7, 8],
[ 9, 10, 11]])]
# 横に3分割(列を分割)
print(np.hsplit(a, 3))
出力:
[array([[ 0],
[ 3],
[ 6],
[ 9]]),
array([[ 1],
[ 4],
[ 7],
[10]]),
array([[ 2],
[ 5],
[ 8],
[11]])]
5. .T
属性:転置(行と列の入れ替え)
配列の行と列を入れ替えます。
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.T)
出力:
[[1 4]
[2 5]
[3 6]]
6. np.newaxis
:次元の追加
🔰 np.newaxis
とは?
NumPyの配列に 新しい次元(軸)を1つ追加したいときに使う特別な記法です。
これは None
と同じ意味を持ち、スライス構文の中に np.newaxis
を入れることで、配列の形(shape)を柔軟に変えることができます。
📦 まずは元の配列を確認
import numpy as np
a = np.array([1, 2, 3])
print("配列aのshape:", a.shape)
出力:
配列aのshape: (3,)
この配列 a
は「1次元」で、要素数が3つあることを意味します(形状は (3,)
です)。
🧠 「先頭」「後ろ」とは?
NumPyの配列の形(shape
)は「次元の並び」です。
たとえば:
-
(3,)
→ 1次元(要素が3つ) -
(1, 3)
→ 2次元(1行3列) -
(3, 1)
→ 2次元(3行1列)
この shape のタプルの **左側を「先頭」・右側を「後ろ」**と呼びます。
つまり:
-
(1, 3)
→ 先頭に1がある(軸0に次元追加) -
(3, 1)
→ 後ろに1がある(軸1に次元追加)
✅ np.newaxis
を使った次元の追加
◾️ a[np.newaxis, :]
→ 先頭(軸0)に次元を追加
print(a[np.newaxis, :])
print("shape:", a[np.newaxis, :].shape)
出力:
[[1 2 3]]
shape: (1, 3)
これは「1行3列」の2次元配列になります。
◾️ a[:, np.newaxis]
→ 後ろ(軸1)に次元を追加
print(a[:, np.newaxis])
print("shape:", a[:, np.newaxis].shape)
出力:
[[1]
[2]
[3]]
shape: (3, 1)
これは「3行1列」の2次元配列になります。
🎯 どこに np.newaxis
を入れるかのまとめ
書き方 | shapeの変化 | 説明 |
---|---|---|
a[np.newaxis, :] |
(1, 3) |
先頭に次元を追加(行ベクトル) |
a[:, np.newaxis] |
(3, 1) |
後ろに次元を追加(列ベクトル) |
7. np.meshgrid()
:グリッドデータの生成
1次元配列から、2次元の格子状データを生成します。
x = np.array([1, 2, 3])
y = np.array([4, 5])
X, Y = np.meshgrid(x, y)
print("X:\n", X)
print("Y:\n", Y)
出力:
X:
[[1 2 3]
[1 2 3]]
Y:
[[4 4 4]
[5 5 5]]
このように、X
は横方向の座標、Y
は縦方向の座標を表す2次元配列になります。
配列操作まとめ表
操作 | 関数・記法 | 説明 |
---|---|---|
差分 | np.diff() |
要素同士の差を計算する |
連結(自由軸) | np.concatenate() |
指定軸で連結(axis) |
縦連結 | np.vstack() |
上下方向に結合(vertical) |
横連結 | np.hstack() |
左右方向に結合(horizontal) |
縦分割 | np.vsplit() |
行方向に分割(vertical) |
横分割 | np.hsplit() |
列方向に分割(horizontal) |
転置 | .T |
行列の行と列を交換 |
次元追加 | np.newaxis |
配列に次元を追加 |
グリッド生成 | np.meshgrid() |
格子状の座標配列を作成 |
おわりに
NumPyの配列操作は、データ前処理や分析の際にとても便利です。
v
や h
の意味も理解しながら、関数を使いこなせるようになれば、実践的な処理にも対応できるようになります。
本記事が理解の助けになれば嬉しいです😊