【问题标题】:fast way to get the indices of a lower triangular matrix as 1 dimensional list in python在python中将下三角矩阵的索引作为一维列表的快速方法
【发布时间】:2012-12-25 19:39:13
【问题描述】:

鉴于方阵的行数(或列数)n,我试图在一维列表中获取下三角矩阵的索引对。到目前为止,我想到了以下解决方案:

def getLowerTriangularIndices(n):
    inds=[];         
    for i in range(1,n):
        for j in range(i):
            inds.append((i,j))
    return inds;

考虑到两个 for 循环,最好有一种更有效的方法来计算它,也许使用 numpy.有人有什么建议吗?

【问题讨论】:

    标签: python matrix numpy triangular


    【解决方案1】:

    Numpy 有一个方法...

    import numpy as np
    
    # create your matrix. If it's not yet a numpy array, make it one
    ar = np.array(matrix)
    indices = np.tril_indices_from(ar)
    

    这将返回两个数组的元组。如果您想将它们作为列表,您可以这样做

    indices = [list(x) for x in np.tril_indices_from(ar)]
    

    实际上不需要数组来获取索引,还有np.tril_indices,它以形状为参数。

    所以你的函数会这样写:

    def getLowerTriangularIndices(n):
        return [list(x) for x in np.tril_indices(n)]
    

    或者如果您想要一个元组列表:

    def getLowerTriangularIndices(n):
        return zip(*np.tril_indices(n)]
    

    【讨论】:

    • 您实际上甚至不需要数组来执行此操作。 np.tril_indices 取一个整数作为矩阵的维数,直接返回索引元组
    • 当你发表评论时,我正在编辑完全相同的内容 - 所以为你 +1。
    • 我认为您只需要 tril_indices 中的一个参数,因为 tril_indices(n,n) 将返回整个数组。
    • 你是对的 - 有趣的是没有人更早发现这个错误。修正了我的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多