如何从numpy.triu()只将上三角值复制到数组中?

fac*_*est 9 python numpy

我有一个方阵A(可以是任何大小),我想取上三角形部分并将这些值放在一个数组中,而不是中心对角线以下的值(k = 0).

A = array([[ 4,  0,  3],
           [ 2,  4, -2],
           [-2, -3,  7]])
Run Code Online (Sandbox Code Playgroud)

使用numpy.triu(A)让我

A = array([[ 4,  0,  3],
           [ 0,  4, -2],
           [ 0,  0,  7]])
Run Code Online (Sandbox Code Playgroud)

但是从这里我怎么只将上三角形元素复制成一个简单的数组呢?如:

[4, 0, 3, 4, -2, 7]
Run Code Online (Sandbox Code Playgroud)

我只是迭代并复制所有非零元素,但允许上三角形为零.

mdm*_*dml 14

您可以使用Numpy的上三角索引函数将上三角形提取A为平面数组:

>>> A[np.triu_indices(3)]
array([ 4,  0,  3,  4, -2,  7])
Run Code Online (Sandbox Code Playgroud)

并且可以轻松地将其转换为Python列表:

>>> list(A[np.triu_indices(3)])
[4, 0, 3, 4, -2, 7]
Run Code Online (Sandbox Code Playgroud)