我有一个方阵 A (可以是任何大小),我想取出上三角部分并将这些值放入一个数组中,而没有中心对角线下方的值 (k=0)。
A = array([[ 4, 0, 3],
[ 2, 4, -2],
[-2, -3, 7]])
使用 numpy.triu(A) 让我
A = array([[ 4, 0, 3],
[ 0, 4, -2],
[ 0, 0, 7]])
但是从这里我如何仅将上三角元素复制到简单数组中?如:
[4, 0, 3, 4, -2, 7]
我打算迭代并复制所有非零元素,但是上三角中的零是允许的。
您可以使用 Numpy 的 上三角索引函数 将
A
的上三角提取到平面数组中:
>>> A[np.triu_indices(3)]
array([ 4, 0, 3, 4, -2, 7])
并且可以轻松地将其转换为 Python 列表:
>>> list(A[np.triu_indices(3)])
[4, 0, 3, 4, -2, 7]
将对称矩阵(二维数组)的上/下三角部分转换为一维数组,并将其返回为二维格式
indices = np.triu_indices_from(A)
A = np.asarray( A[indices] )
import numpy as np
A = np.array([[ 4, 0, 3],
[ 2, 4, -2],
[-2, -3, 7]])
# Get the upper triangular part
upper_tri = np.triu(A,k=0)
'''
[[ 4 0 3]
[ 0 4 -2]
[ 0 0 7]]
'''
# Flatten the upper triangular part
upper_tri_flat = upper_tri[np.triu_indices_from(A)]
print(upper_tri_flat)
'''
[ 4 0 3 4 -2 7]
'''