我有一个方阵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)
将对称矩阵(2D阵列)的上/下三角形部分转换为1D阵列并将其返回到2D格式
indices = np.triu_indices_from(A)
A = np.asarray( A[indices] )
Run Code Online (Sandbox Code Playgroud)