编写返回n标识的函数标识(n)
矩阵。
例如:identity(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
我也试过射程,但不是这样的
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]]
这是因为初始化
matrix
的方式。[[0]*n]*n
的每个子列表都是同一个列表[0]*n
,换句话说,矩阵的每一行都是对同一基础行的引用。您可以使用id
进行验证:因此,当给矩阵的第
i
行赋值时,就是给所有行赋值。因此避免使用[0]*n
创建嵌套列表。相反,使用更简单的是,避免所有这些:
Numpy内置了这个,你可以使用np.eye(n):
如果不允许使用numpy。。。知道这个How to define two-dimensional array in python
然后做这个
相关问题 更多 >
编程相关推荐