访问Numpy矩阵的下三角?

时间:2010-02-27 22:51:56

标签: python numpy

好的,基本上我可以说我有一个矩阵:

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矩阵时,是否可以轻松获得对角线以下的区域?我环顾四周,找不到任何东西。我可以做标准,循环方式,但不会以某种方式使numpy给出的性能无效?

我正在计算比较模型输出结果的实际结果的统计量。我目前给出的数据结果大约为10,000 x 10,000矩阵。我主要是想把这些元素加起来。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:11)

您可以使用triltriu。在这里看到他们: http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html

答案 1 :(得分: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-loop时,天使就会得到它的翅膀。

-ejh

快速注意:这避免了对角线...如果你想要它,你的矩阵是对称的,只需省略反转(elem-wise NOT)。否则,你需要在那里进行转置。