我如何形成矩阵标识?

时间:2014-05-07 20:34:51

标签: python list matrix range identity

我在这里要完成的是生成一个大小 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]]

2 个答案:

答案 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