【问题标题】:How do I form a matrix identity? [duplicate]如何形成矩阵恒等式? [复制]
【发布时间】:2014-05-07 20:34:50
【问题描述】:

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

【问题讨论】:

  • numpy here的可能解决方案
  • @Bill,这个问题涉及比较,而不是创造。
  • oneliner no numpy: ones = [[0]*i + [1] + [0]*(n-i-1) for i in range(n) ]

标签: python list matrix range identity


【解决方案1】:

n 是要制作的身份的大小

def identity(n):
    return [[1 if i==j else 0 for j in range(n)] for i in range(n)]

【讨论】:

    【解决方案2】:

    这个可能不是最 Python 的,但它比其他解决方案更快。

    def identity(m):
        result = []
        for i in range(m):
            row = [0]*m
            row[i] = 1
            result.append(row)
        return result
    

    在我的机器上,对于 500x500 矩阵,我的函数需要 3.13 毫秒才能执行,而 python 列表理解解决方案(进行 m² 比较)需要 47.48 毫秒才能完成。

    当然,如果你使用的是 python 2.x,你应该使用 xrange 而不是 range

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多