Pythonリスト型二次元配列の転置:行と列を入れ替える方法
Pythonでデータ処理を行う際、**二次元配列(リストのリスト)**の行と列を入れ替える「転置」操作は頻繁に必要とされます。この記事では、Pythonのリスト型二次元配列を効率的に転置するさまざまな方法を、短いサンプルコードとともに解説します。
転置とは?
転置とは、行列の行と列を入れ替える操作のことです。例えば、以下の3×2の二次元配列があるとします。
[[1, 2],
[3, 4],
[5, 6]]
これを転置すると、2×3の配列になり、以下のようになります。
[[1, 3, 5],
[2, 4, 6]]
データ分析や機械学習の分野では、データの形式を変換する際によく用いられます。
Pythonで二次元配列を転置する方法
Pythonで二次元配列を転置するには、いくつかの方法があります。それぞれ見ていきましょう。
1. zip()関数を使う方法(最もPythonic)
Pythonで二次元配列を転置する最も一般的で推奨される方法は、組み込みのzip()関数を使うことです。zip()は複数のイテラブルの要素をまとめてくれます。これに*演算子(アンパック演算子)を組み合わせることで、簡単に転置が実現できます。
original = [[1, 2],
[3, 4],
[5, 6]]
transposed = list(zip(*original)) # zipオブジェクトをリストに変換
print(transposed)
# 出力: [(1, 3, 5), (2, 4, 6)]
zip()はタプルのリストを返しますが、必要であればさらにlist()でリストのリストに変換することも可能です。
original = [[1, 2],
[3, 4],
[5, 6]]
transposed_list = [list(row) for row in zip(*original)]
print(transposed_list)
# 出力: [[1, 3, 5], [2, 4, 6]]
この方法は非常に簡潔で効率的であり、Pythonらしい記述と言えます。
2. リスト内包表記を使う方法
zip()関数を使わずに、リスト内包表記を使って手動で転置することも可能です。この方法は、特に特定の列だけを抽出したい場合など、より細かい制御が必要な場合に役立ちます。
original = [[1, 2],
[3, 4],
[5, 6]]
# 0列目、1列目…と順に新しい行を作成
transposed = [[row[i] for row in original] for i in range(len(original[0]))]
print(transposed)
# 出力: [[1, 3, 5], [2, 4, 6]]
この方法はzip()に比べてやや冗長ですが、処理の仕組みがより分かりやすいかもしれません。
3. NumPyを使う方法(数値計算向け)
もし数値計算が主な目的であれば、Pythonの科学計算ライブラリであるNumPyを使用するのが最も強力で効率的です。NumPyの配列(ndarray)は、多次元配列の操作に特化しており、転置も非常に簡単に行えます。
import numpy as np
original_np = np.array([[1, 2],
[3, 4],
[5, 6]])
transposed_np = original_np.T # .T属性で簡単に転置
print(transposed_np)
# 出力:
# [[1 3 5]
# [2 4 6]]
NumPyを使用すると、大規模な配列の転置が非常に高速に行えますが、NumPyのインストールが必要です。
まとめ
Pythonで二次元配列(リストのリスト)を転置する方法はいくつかありますが、
-
最もPythonicで推奨されるのは
zip(*array)を使う方法 -
リスト内包表記で手動で転置することも可能
-
数値計算が主ならNumPyが最も効率的
これらの方法を使いこなすことで、Pythonでのデータ操作がよりスムーズになります。状況に応じて最適な方法を選択してください。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


