我很容易接受,但不幸的是我无法解决它。我有一个矩阵64x64元素,你可以在图像上看到。红色是零,绿色是我感兴趣的值。
我想最终只能将对角线下的三角形部分(绿色值)放到一个数组中。
我使用Python 2.7
非常感谢,
迈克尔
答案 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)])