访问Numpy矩阵的下三角?

4

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

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个回答

11

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

快速注:这避免了对角线...如果您需要它,并且您的矩阵是对称的,请省略反转(元素逐一 NOT)。否则,您需要进行转置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接