NumPy配列を効率的に繰り返し並べるnp.tile徹底解説


 

NumPyを使用していると、配列を特定のパターンで繰り返したり、拡張したりする場面によく遭遇します。そんな時に非常に便利なのが**np.tile**関数です。この記事では、np.tileの基本的な使い方から、具体的なサンプルコードを交えながらその強力な機能までを詳しく解説します。


 

np.tileとは?

 

np.tileは、NumPy配列を指定した回数だけ繰り返し、タイル状に並べて新しい配列を作成する関数です。データ拡張、特徴量エンジニアリング、シミュレーションなど、多岐にわたる場面で役立ちます。

 

書式

 

Python
 
numpy.tile(A, reps)
  • A: 繰り返し並べたい元の配列(ndarray)。

  • reps: 各次元でAを繰り返す回数を指定します。

    • 整数: 全ての次元で指定した回数だけ繰り返します。

    • タプルまたは配列: 各次元ごとに繰り返す回数を指定します。Aの次元数よりもrepsの要素数が少ない場合、先頭の次元から順に繰り返され、残りの次元は1回(繰り返さない)とみなされます。Aの次元数よりもrepsの要素数が多い場合、repsの先頭要素が無視され、残りの要素がAの各次元に対応します。


 

np.tileの基本的な使い方

 

まずは、最もシンプルなケースから見ていきましょう。

 

1. 1次元配列の繰り返し

 

1次元配列を繰り返す場合、repsに整数を指定すると、その回数だけ配列が連結されます。

 

サンプルコード

 

Python
 
import numpy as np

arr_1d = np.array([1, 2, 3])
tiled_arr_1d = np.tile(arr_1d, 3)
print(tiled_arr_1d)

 

出力例

 

[1 2 3 1 2 3 1 2 3]

 

2. 2次元配列の繰り返し

 

2次元配列を繰り返す場合、repsにタプルを指定することで、行方向と列方向それぞれの繰り返し回数を制御できます。

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2], [3, 4]])
tiled_arr_2d = np.tile(arr_2d, (2, 3)) # 行方向に2回、列方向に3回繰り返す
print(tiled_arr_2d)

 

出力例

 

[[1 2 1 2 1 2]
 [3 4 3 4 3 4]
 [1 2 1 2 1 2]
 [3 4 3 4 3 4]]

 

np.tileの応用例

 

np.tileは、様々なシナリオでその真価を発揮します。

 

1. 次元数の異なる配列への適用

 

repsの次元数が元の配列Aの次元数と異なる場合、np.tileは自動的に次元を調整してくれます。

 

repsの次元数がAより小さい場合

 

repsの要素がAの次元の先頭から順に適用され、残りの次元は1回繰り返されると解釈されます。

 

サンプルコード

 

Python
 
import numpy as np

arr = np.array([[1, 2], [3, 4]])
tiled_arr = np.tile(arr, 2) # arrを全体的に2回繰り返す
print(tiled_arr)

 

出力例

 

[[1 2 1 2]
 [3 4 3 4]]

 

2. ブロードキャストの代替としての利用

 

ブロードキャストでは対応が難しい複雑な繰り返しパターンも、np.tileを使えば簡単に実現できます。例えば、あるベクトルを複数回、行または列にコピーしたい場合などに便利です。

 

サンプルコード

 

Python
 
import numpy as np

# 行ベクトルを複数行にコピーしたい場合
row_vec = np.array([10, 20, 30])
copied_rows = np.tile(row_vec, (4, 1)) # 4行、1列方向にコピー
print("Copied Rows:\n", copied_rows)

print("-" * 20)

# 列ベクトルを複数列にコピーしたい場合
col_vec = np.array([[100], [200]])
copied_cols = np.tile(col_vec, (1, 3)) # 1行、3列方向にコピー
print("Copied Columns:\n", copied_cols)

 

出力例

 

Copied Rows:
 [[10 20 30]
 [10 20 30]
 [10 20 30]
 [10 20 30]]
--------------------
Copied Columns:
 [[100 100 100]
 [200 200 200]]

 

まとめ

 

np.tileは、NumPy配列を柔軟に繰り返し並べるための強力な関数です。1次元から多次元配列まで対応し、reps引数を適切に指定することで、様々な繰り返しパターンを効率的に作成できます。データの前処理やシミュレーションなど、NumPyを用いたプログラミングにおいて、この関数は非常に役立つでしょう。ぜひ活用してみてください。