1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】NumPyの配列の連結・分割・変形まとめ(diff, concatenate, vstack, vsplitなど)

Last updated at Posted at 2025-07-17

Pythonで数値計算やデータ処理を行う際によく使われる NumPy
この記事では、NumPyで使う「配列の連結・分割・変形」について、実行例と出力をセットでわかりやすく解説します。

目次

  1. np.diff():差分を求める
  2. np.concatenate():配列の連結(axis指定)
  3. np.vstack() / np.hstack():縦・横方向の連結
  4. np.vsplit() / np.hsplit():縦・横方向の分割
  5. .T属性:転置(行と列の入れ替え)
  6. np.newaxis:次元の追加
  7. 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の配列操作は、データ前処理や分析の際にとても便利です。
vh の意味も理解しながら、関数を使いこなせるようになれば、実践的な処理にも対応できるようになります。
本記事が理解の助けになれば嬉しいです😊

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?