我在这里要完成的是生成一个大小 n x n 的矩阵。无论矩阵是什么,我都必须填写从左上角到右下角的1
和其他地方的0
。
def identity(m):
new_identity = []
old_identity = m
for i in range(len(old_identity)):
new_identity.append(old_list[1])
return new_identity
例如,如果矩阵为3,则预期结果为:
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
或者为了更容易想象:
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
答案 0 :(得分:5)
其中n
是要生成的标识的大小
def identity(n):
return [[1 if i==j else 0 for j in range(n)] for i in range(n)]
答案 1 :(得分:1)
这个可能不是最pythonic,但它比其他解决方案更快。
def identity(m):
result = []
for i in range(m):
row = [0]*m
row[i] = 1
result.append(row)
return result
在我的机器上,对于500x500矩阵,我的函数需要3.13毫秒才能执行,而python列表理解解决方案(使得m2比较)需要47.48毫秒才能完成。
当然,如果您使用的是python 2.x,则应使用xrange
而不是range