【Python】enumerateとリスト内包表記で正方行列の対角要素を削除する方法
正方行列から対角要素(i行i列目の要素)を削除したい場面は、データ処理や行列演算においてよくあります。Pythonでは、組み込み関数のenumerateとリスト内包表記を組み合わせることで、シンプルかつ効率的にこの操作を実現できます。
サンプルコード
以下に、正方行列から対角要素を削除する具体的な実装例を示します。
my_list = [[45, 67, 85, 42, 11], [78, 99, 10, 13, 0], [91, 23, 23, 64, 23], [91, 11, 22, 14, 35]]
print("The list is :")
print(my_list)
my_result = []
for index, element in enumerate(my_list):
my_result.append([ele for index_1, ele in enumerate(element) if index_1 != index])
print("The resultant matrix is :")
print(my_result)
実行結果
The list is : [[45, 67, 85, 42, 11], [78, 99, 10, 13, 0], [91, 23, 23, 64, 23], [91, 11, 22, 14, 35]] The resultant matrix is : [[67, 85, 42, 11], [78, 10, 13, 0], [91, 23, 64, 23], [91, 11, 22, 35]]
コードの解説
まず、リストのリスト(二次元リスト)として4×4の正方行列を定義し、コンソールに表示します。
次に、結果を格納するための空のリスト
my_resultを用意します。enumerateを使って行列を反復処理し、各行のインデックスindexと行そのものelementを同時に取得します。反復処理の中でリスト内包表記を使用し、各行の要素を順番に走査します。
ここでは、要素自身のインデックス
index_1が、外側のループで得られた行インデックスindexと一致するかどうかを判定します。両者が一致しない場合(=対角要素ではない場合)のみ、その要素を結果のリストに追加します。
こうして対角要素が取り除かれた新しい行列が生成され、コンソールに出力されます。
ポイントまとめ
この手法のポイントは、「行のインデックスと列のインデックスが一致する位置」がまさに対角要素であるという行列の性質を利用している点です。条件式index_1 != indexひとつで、対角要素だけを簡単に除外できます。
なお、大規模な数値計算を行う場合は、NumPyライブラリを使うのも有効な選択肢です。以下のように単位行列をマスクとして使えば、同様の処理を高速に実行できます。
import numpy as np
arr = np.array([[45, 67, 85, 42, 11], [78, 99, 10, 13, 0],
[91, 23, 23, 64, 23], [91, 11, 22, 14, 35]])
mask = ~np.eye(len(arr), dtype=bool)
result = arr[mask].reshape(len(arr), -1)
print(result)
ただし、標準ライブラリだけで完結する最初の方法は、小規模なデータやPythonの学習用途において手軽で理解しやすいアプローチです。目的やデータサイズに応じて使い分けるとよいでしょう。
-
PythonでリストからN個の最大要素を取得する方法
整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):
-
Pythonでリストから重複要素を削除する方法を徹底解説
重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。