给定方阵的行数(或列)n,我试图得到一维列表中下三角矩阵的索引对。到目前为止,我想到了以下解决方案:
def getLowerTriangularIndices(n):
inds=[];
for i in range(1,n):
for j in range(i):
inds.append((i,j))
return inds;
考虑到两个for循环,使用numpy有一个更有效的计算方法会好得多。有没有人有建议?
答案 0 :(得分: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)]