スライドショー

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

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

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

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

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

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

転置とは

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

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の転置方法をしっかり理解していきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

akira

akira

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説