矩阵中对角线下部的一维向量[Python]

时间:2017-02-08 15:10:47

标签: python python-2.7 numpy matrix scipy

我很容易接受,但不幸的是我无法解决它。我有一个矩阵64x64元素,你可以在图像上看到。红色是零,绿色是我感兴趣的值。

enter image description here

我想最终只能将对角线下的三角形部分(绿色值)放到一个数组中。

我使用Python 2.7

非常感谢,

迈克尔

3 个答案:

答案 0 :(得分:0)

您可以使用np.tril_indices返回给定形状的矩阵下三角部分的索引,索引可以进一步用于从矩阵中提取值,假设您的矩阵被称为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])

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在此示例中比triu快两倍:

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