如何访问Numpy矩阵的下三角?

4 投票
2 回答
3877 浏览
提问于 2025-04-15 19:48

好的,假设我有一个矩阵:

matrix([[0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4]])

在使用numpy处理矩阵时,有没有简单的方法可以得到对角线下方的区域?我查了一下,没找到相关的信息。我可以用常规的for循环来实现,但这样会不会影响numpy的性能呢?

我正在计算模型输出结果与实际结果的统计数据。我现在手头的数据大约是一个10,000 x 10,000的矩阵。我主要是想对这些元素进行求和。

有没有简单的方法可以做到这一点?

2 个回答

2
def tri_flat(array):
    R = array.shape[0]
    mask = np.asarray(np.invert(np.tri(R,R,dtype=bool)),dtype=float)
    x,y = mask.nonzero()
    return array[x,y]

我自己也在找一个方便的函数,不过这个也凑合吧……不太确定有没有更简单的。如果有的话,我很想知道。每次你避免使用for循环,就像是给天使长出了一对翅膀。

-ejh

快速提醒:这个方法避开了对角线……如果你想要对角线,而且你的矩阵是对称的,那就直接去掉反转(逐个取反)。否则,你需要在里面加一个转置。

11

你可以使用 triltriu 这两个函数。你可以在这里查看它们的详细信息:http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html

撰写回答