矩阵中对角线下半部分的1D向量[Python]
我正在为一件相当简单的事情苦苦挣扎,但不幸的是我无法解决它。我有一个矩阵64x64元素,你可以在图片上看到。红色是零,绿色是我感兴趣的值 最后,我想将对角线下的三角形部分(绿色值)合并到一个数组中 我使用Python2.7 多谢各位矩阵中对角线下半部分的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[
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)])