Что может быть более полезным, это использовать массив numpy .Он позволяет вам использовать атрибут shape
, чтобы проверить, является ли матрица квадратной, и тогда вам не нужно вводить размерный размер
import numpy as np
mat = np.array([[1, 2, 3], [2, 5, 4], [3, 4, 7]])
def symmetric(mat):
rows, cols = mat.shape
if rows != cols:
raise ValueError("Invalid matrix isn't square")
for i in range(rows):
for j in range(cols):
if (mat[i][j] != mat[j][i]):
return False
return True
try:
is_symmetric = symmetric(mat)
except ValueError as e:
print(e)
Numpy - это пакет, который вам понадобится pip install
, но это позволяет вам довольно легко превентивно обрабатывать неквадратный регистр.Кроме того, функция allclose
может позволить вам быстро проверить симметричную природу массива, как указано в в этом вопросе , или как предложил @Sheldore:
def symmetric(mat):
if (mat.T == mat).all():
return True
return False
mat = np.array([[1, 2, 3], [2, 5, 4], [3, 4, 7]])
Подход с использованием собственного списка
Вы можете использовать подход к пониманию списка в сочетании с операцией all
:
def symmetric(mat, N):
# This is a pretty naive way to check the dimensions in a similar fashion
# as np.shape, but this gets the thought process across
row, col = len(mat[0][:]), len(mat[:][0])
if row != col:
raise ValueError("Non-square matrix is invalid")
if all([mat[i][j] == mat[j][i] for i, j in zip(range(row), range(col))]:
return True
return False