4

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

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

考虑到这两个 for 循环,最好有一种更有效的方法来计算这个可能使用 numpy. 有人有建议吗?

4

1 回答 1

6

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)]
于 2013-01-11T08:49:07.530 回答