Необходимо написать функцию которая создает квадратичную единичную матрицу, не применяя библиотеку NumPy
def build_array(n):
m = [[for i in range(n)] for j in range(n)]
m[i][i] = 1
return m
Выдает ошибку по синтаксису. В чем ошибка, не могу понять?
Ответы (5 шт):
Попробуйте так:
def build_array(n):
return [[1 for _ in range(n)] for __ in range(n)]
Если нужна единичная матрица:
def build_array(n):
return [[int(i==j) for i in range(n)] for j in range(n)]
Ваша ошибка заключается в том, что вы не указали функцию присвоения элемента для [for i in range(n)], т.е. должна быть форма [f(i) for i in range(n)], f(i) - функция присвоения зависящая от i.
Говоря другими словами, данный код:
m = [f(i) for i in range(n)]
эквивалентен cледующему коду(ведет себя аналогично):
m = []
for i in range(n):
m.append(f(i))
Более подробно читайте официальную документацию.
Можно инициализировать таблицу нулями, а затем установить единицы по диагонали(это если вам нужна единичная матрица, а не матрица заполненная единицами), но проще решить задачу следующим образом:
def build_array(n):
return [[int(i==j) for i in range(n)] for j in range(n)]
Вот самая настоящая единичная матрица, аналог np.eye() (не путать с матрицей состоящей из единиц np.ones()):
def build_array(n):
return [[1 if i==j else 0 for j in range(n)] for i in range(n)]
list comprehension должен быть такого вида
[i for i in range(n)]
а у вас просто
[for i in range(n)]
поэтому и происходит ошибка
Чтобы единицы стояли под догнали место перед for допишите 1 if i == j else 0
[[1 if i == j else 0 for i in range(n)] for j in range(n)]