矩阵中对角线下半部分的1D向量[Python]

矩阵中对角线下半部分的1D向量[Python],python,python-2.7,numpy,matrix,scipy,Python,Python 2.7,Numpy,Matrix,Scipy,我正在为一件相当简单的事情苦苦挣扎,但不幸的是我无法解决它。我有一个矩阵64x64元素,你可以在图片上看到。红色是零,绿色是我感兴趣的值 最后,我想将对角线下的三角形部分(绿色值)合并到一个数组中 我使用Python2.7 多谢各位 Michael您可以使用np.tril\u索引返回给定形状矩阵下三角部分的索引,如果您的矩阵名为arr,则这些索引可以进一步用于从矩阵中提取值: arr[np.tril_indices(n=64,m=64)] 如果要排除对角线,可以提供额外的偏移参数: arr[

我正在为一件相当简单的事情苦苦挣扎,但不幸的是我无法解决它。我有一个矩阵64x64元素,你可以在图片上看到。红色是零,绿色是我感兴趣的值

最后,我想将对角线下的三角形部分(绿色值)合并到一个数组中

我使用Python2.7

多谢各位


Michael

您可以使用
np.tril\u索引
返回给定形状矩阵下三角部分的索引,如果您的矩阵名为
arr
,则这些索引可以进一步用于从矩阵中提取值:

arr[np.tril_indices(n=64,m=64)]
如果要排除对角线,可以提供额外的偏移参数:

arr[np.tril_indices(n = 64, m = 64, k = -1)]

例如:

arr = np.array([list(range(i, 5+i)) for i in range(5)])
arr
#array([[0, 1, 2, 3, 4],
#       [1, 2, 3, 4, 5],
#       [2, 3, 4, 5, 6],
#       [3, 4, 5, 6, 7],
#       [4, 5, 6, 7, 8]])

arr[np.tril_indices(n = 5, m = 5)]
# array([0, 1, 2, 2, 3, 4, 3, 4, 5, 6, 4, 5, 6, 7, 8])

假设您可以将数据拉入numpy数组,请使用
tril\u index
函数。看起来您的数据不包括主对角线,因此可以按-1移位

data = np.arange(4096).reshape(64, 64)
inds = np.tril_indices(64, -1) 
vals = data[inds]

在本例中,比triu快两倍:

np.concatenate([arr[i,:i] for i in range(1,n)])