Напишіть функцію ідентичності (n), яка повертає n ідентичності матриці.
Наприклад: ідентичність (3) виходів [[1,0,0] [0,1,0] [0,0,1]]
Я спробував:
def identity(n):
matrix=[[0]*n]*n
i=0
while i<n:
matrix[i][i]=1
i+=1
return matrix
Крім того, я спробував з діапазоном, але він "n працювати, як це
def identity(n):
matrix=[[0]*n]*n
k=matrix[:]
i=0
for i in range(1,n):
matrix[i][i]=1
i+=1
return k
print(identity(5))
Але це вихід для n = 5
:
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
Відповіді:
2 для відповіді № 1Якщо numpy не дозволено ... Знайте це Як визначити двовимірний масив в python
і зробіть це
def identity(n):
m=[[0 for x in range(n)] for y in range(n)]
for i in range(0,n):
m[i][i] = 1
return m
3 для відповіді № 2
Це тому, що ви ініціалізуєте matrix
. Кожен підсписок Росії [[0]*n]*n
є того ж списку [0]*n
або іншими словами, кожен рядок вашої матриці є a довідка до того ж основного рядка. Це можна перевірити за допомогою id
:
> x = [[0]*3]*3
> x
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
> id(x[0])
140017690403112
> id(x[1])
140017690403112
> id(x[2])
140017690403112
TТаким чином, при призначенні значення i
У рядку вашої матриці ви призначаєте її всім рядкам [0]*n
. Замість цього використовуйте
matrix = [[0]*n for _ in range(n)]
Ще простіше, уникайте всього цього з:
import numpy as np
np.eye(n)
1 для відповіді № 3
Numpy має цю вбудовану, ви можете просто використовувати np.eye (n):
In [1]: import numpy as np
In [2]: x = np.eye(4)
In [3]: x
Out[3]:
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])