【Python入門】リストやNumPyを使用した転置方法 徹底解説!

Pythonで数値計算や行列などを扱っていると転置の方法を知りたいことがあります!

「Pythonで転置はどうやってするのだろう?」
「NumPyを使用して転置はどうやるのだろう?」

そのような方に向けて、この記事では以下の内容で解説していきます。

・ リストでの転置方法
・ NumPyでの転置方法
・ 1次元配列での転置方法

転置についてわかりやすく解説していますので、ぜひ参考にしてくださいね!

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

転置とは

転置とは、行列などで縦と横の要素を入れ替えることです。

Pythonではこの転置を様々な方法で行うことができますので詳しく見ていきましょう!

リストでの転置方法

ここでは、Pythonのリストで作成した行列の転置方法を紹介していきます。

プログラム的には少し複雑になりますが、アルゴリズムの勉強にもなりますので頑張って学習していきましょう!

for文で転置をしてみよう!

ここではPythonのリストで作成した行列をfor文でループして転置をしています!

サンプルコードは、以下になります!

外側のループでは、行列の一つ目の要素を取得し、その個数分ループ処理を行っています。

内側のループでは、行列要素のインデックスを利用して作成されたtmpリストをさらにリストに追加していくことで転置された行列を作成しています。

matrix = [[1, 2], [3, 4]]
transpose = []
for i in range(len(matrix[0])):
    tmp = []
    for v in matrix:
        tmp.append(v[i])
    transpose.append(tmp)

print(transpose)

実行結果

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

実行結果より、うまく行列が転置されていることがわかりますね!

zip()関数で転置をしてみよう!

次はzip()関数を使用して転置を行っていきましょう!

サンプルコードはこちらです!

zip()関数に行列を渡すと、リスト内の要素がタプルになってしまいます!

そのためリスト内包表記を使用して、タプルをリストに変換する処理を追加しましょう!

matrix = [[1, 2], [3, 4]]

# これだと中の要素がタプルになってしまう
print(list(zip(*matrix)))

# タプルをリストに変換する処理を入れる
print([list(x) for x in zip(*matrix)])

実行結果

[(1, 3), (2, 4)]
[[1, 3], [2, 4]]

NumPyでの転置方法

これまでPythonのリストを使用して転置する方法を学習してきました。

しかしPythonのリストを使用した転置方法は少し面倒でしたよね?

実はPythonにはとても簡単に行列を扱うことができて、転置も簡単に行えるNumPyというライブラリがあるのです!

次項からこのNumPyを使用して転置する方法を学習していきましょう!

NumPyの行列操作について詳しく知りたい方はこちらを見てください!

Tで転置をしてみよう!

それでは、NumPyを使用した転置の方法を見ていきましょう!

サンプルコードを見てください!

まずnp.arrayでNumPyの配列を作成しています!

転置は、NumPy配列であれば.Tを使用するだけでできてしまうのです!

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
print(matrix.T)

実行結果

[[1 3]
 [2 4]]

実行結果からもちゃんと転置ができていることがわかりますね!

このようにNumPyでは簡単に行列の転置をすることができるのです!

transpose()で転置をしてみよう!

続いてNumPyで転置をするその他の方法も見ていきましょう!

先程と同様にNumPyの配列を作成しています。

今回は転置をtranspose()で行っています!

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
print(matrix.transpose())

実行結果

[[1 3]
 [2 4]]

transpose()は、引数に軸を指定して順番を入れ替えることもできます。

以下のサンプルコードは、2次元配列の順番を入れ替えています!

import numpy as np

arr = np.arange(1,5).reshape(2,2)

# 元の配列を表示
print('-'*10 + "arr")
print(arr)

# 元々の順番で軸を指定(0, 1)は変わらない
print('-'*10 + "transpose(0, 1)")
print(arr.transpose(0, 1))

# 転置
print('-'*10 + "transpose()")
print(arr.transpose())

# 軸の順番を逆に指定(0, 1)は転置と同じになる
print('-'*10 + "transpose(1, 0)")
print(arr.transpose(1, 0))

実行結果

----------arr
[[1 2]
 [3 4]]
----------transpose(0, 1)
[[1 2]
 [3 4]]
----------transpose()
[[1 3]
 [2 4]]
----------transpose(1, 0)
[[1 3]
 [2 4]]

3次元配列は少し難易度が上がりますが、こちらにサンプルコードを用意しましたので、実行結果を見て確認してみましょう!

import numpy as np

arr = np.arange(1, 9).reshape(2, 2, 2)

print('-'*10 + "arr")
print(arr.shape)
print(arr)

print('-'*10 + "transpose(0, 1, 2)")
print(arr.transpose(0, 1, 2))

print('-'*10 + "transpose(0, 2, 1)")
print(arr.transpose(0, 2, 1))

print('-'*10 + "transpose(2, 1, 0)")
print(arr.transpose(2, 1, 0))

print('-'*10 + "transpose(1, 0, 2)")
print(arr.transpose(1, 0, 2))

実行結果

----------arr
(2, 2, 2)
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
----------transpose(0, 1, 2)
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
----------transpose(0, 2, 1)
[[[1 3]
  [2 4]]

 [[5 7]
  [6 8]]]
----------transpose(2, 1, 0)
[[[1 5]
  [3 7]]

 [[2 6]
  [4 8]]]
----------transpose(1, 0, 2)
[[[1 2]
  [5 6]]

 [[3 4]
  [7 8]]]

transpose()についてさらに詳しく知りたい方は、こちらの記事も詳しく書かれていますので参考にしてみてください!

1次元配列での転置方法

今度は1次元配列を転置したい場合はどうすればいいか考えていきましょう!

1次元配列の転置をしてみよう!

まず1次元配列を転置するとどうなるのか見てみましょう!

サンプルコードを見てください。

まずNumPyで1次元配列を作成し、転置しています!

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
print(arr.T)

実行結果

[1 2 3 4 5 6]

実行結果を見てください!

当然ではありますが、1次元配列を転置しても変化はなく、転置ができていないことがわかりましたね。

reshapeしてから転置をしてみよう!

先程の1次元配列の例では転置できないことがわかりました。

それでは、1次元配列の転置はどのようにすれば良いのでしょうか?
結論から言うと、1次元配列を2次元配列に変換して転置をすれば可能になります!

サンプルコードで見ていきましょう!

まず先程と同様に、np.arrayで1次元配列を作成しています!
このままだと転置がされないため、reshapeを使用して行列へ変換してしまうのです!

あとはこれをtranspose())すれば転置できるのです!

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

matrix = arr.reshape((1, len(arr)))
print(matrix)

print(matrix.transpose())

実行結果

[[1 2 3 4 5 6]]
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]

今度は実行結果からも転置されていることがわかりますね!

まとめ

いかがでしたでしょうか。

今回は、Pythonの転置について学習しました!

PythonはNumPyがあるため転置を簡単に行うことができます!
NumPyはその他にも処理がとても高速であり、少ないコード量で様々な数値処理を行うことができます。

Pythonをマスターする上では必須のライブラリとなっていますので、NumPyの転置方法をしっかり理解していきましょう!

この記事を書いた人

インフラエンジニア→プログラマー。趣味は3歳の子供にPCの使い方、タイピングを教えること。業務ではPython, PHP, Javaなどやってます。

目次