Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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の学習用途において手軽で理解しやすいアプローチです。目的やデータサイズに応じて使い分けるとよいでしょう。

  1. PythonでリストからN個の最大要素を取得する方法

    整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):

  2. Pythonでリストから重複要素を削除する方法を徹底解説

    重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。