如何访问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处理矩阵时,有没有简单的方法可以得到对角线下方的区域?我查了一下,没找到相关的信息。我可以用常规的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
你可以使用 tril
和 triu
这两个函数。你可以在这里查看它们的详细信息:http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html