提取 numpy 矩阵的上三角或下三角部分

新手上路,请多包涵

I have a matrix A and I want 2 matrices U and L such that U contains the upper triangular elements of A (all elements上面但不包括对角线)和类似的 L (下面的所有元素,不包括对角线)。是否有 numpy 方法来执行此操作?

例如

A = array([[ 4.,  9., -3.],
           [ 2.,  4., -2.],
           [-2., -3.,  7.]])

U = array([[ 0.,  9., -3.],
           [ 0.,  0., -2.],
           [ 0.,  0.,  0.]])

L = array([[ 0.,  0.,  0.],
           [ 2.,  0.,  0.],
           [-2., -3.,  0.]])

原文由 pratikm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

试试 numpy.triu (三角形上)和 numpy.tril (三角形下)。

代码示例:

 np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 0,  8,  9],
       [ 0,  0, 12]])

原文由 mathematical.coffee 发布,翻译遵循 CC BY-SA 4.0 许可协议

要将 上三角值提取 到平面向量,您可以执行以下操作:

 import numpy as np

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)

#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])

a[np.triu_indices(3)]
#or
list(a[np.triu_indices(3)])

#array([1, 2, 3, 5, 6, 9])


同样,对于 下三角,使用 np.tril


重要的

如果要提取 对角线以上(或 以下)的值,请使用 k 参数。这通常在矩阵对称时使用。

 import numpy as np

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])

a[np.triu_indices(3, k = 1)]

# this returns the following
array([2, 3, 6])


编辑(2019 年 11 月 11 日):

要将提取的矢量放回二维对称数组,可以按照我的回答在这里: https ://stackoverflow.com/a/58806626/5025009

原文由 seralouk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏