好的,基本上我可以说我有一个矩阵:
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矩阵。我主要是想把这些元素加起来。
有一种简单的方法吗?
答案 0 :(得分:11)
您可以使用tril
和triu
。在这里看到他们:
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)。否则,你需要在那里进行转置。