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

问题描述 投票:0回答:3

我有一个方阵 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]

我打算迭代并复制所有非零元素,但是上三角中的零是允许的。

python numpy
3个回答
17
投票

您可以使用 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]

6
投票

0
投票
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]
'''
© www.soinside.com 2019 - 2024. All rights reserved.