在python中获取方阵的上三角或下三角的所有元素

2024-10-02 12:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在numpy/scipy中是否有一个函数可以返回一个方阵中某个三角形(上或下)的所有元素?在

例如:

matrix = [[1,  2,  3],
          [4,  5,  6],
          [7,  8,  9]]

三角形(上下):

^{pr2}$

或者

up = [1,2,5,3,6,9]
down = [1,4,7,5,8,9]

谢谢你!在

编辑:

是的,有两个函数可以帮助您做到这一点:np.triu_indices(n)(用于上三角)和{}(用于下三角)。在

谢谢Katrielex!在


Tags: 函数numpy元素编辑npscipymatrixdown
2条回答

以下代码提取包含对角线的下三角:

hstack(mat[i][:i+1] for i in xrange(mat.shape[0])) 

这将提取不带对角线的下三角:

^{pr2}$

元素的顺序重要吗?在

通常情况下,矩阵的上、下三角取对角线(从左上到右下)。要解决这个问题,您需要在两条对角线之间“翻转”,这可以通过np.fliplr(matrix)来实现。这将得到正确的元素,但以“自然”的顺序(一行一行,每一行变短)。您也可以通过相反的方式来获得一列一列的顺序(np.flipud)。但是我不知道有什么方法可以得到你所使用的“按较小对角线读取”的顺序,除了一次读取一个对角线的矩阵。在

为了得到对角线元素,你可以用np.triu_indices(或者,对于下三角,np.tril_indices)得到它们的索引,然后用它们来索引。在

>>> matrix
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.fliplr(matrix)[np.triu_indices(3)]
array([3, 2, 1, 5, 4, 7])

相关问题 更多 >

    热门问题