我正在将代码从MATLAB翻译成Python。我需要提取矩阵的较低次对角值。我在python中的尝试似乎提取了相同的值(总和相等(,但顺序不同。这是一个问题,因为我需要在之后应用corrcoeff。
最初的Matlab代码使用一组索引来对矩阵进行子集设置。
MATLAB代码:
values = 1:100;
matrix = reshape(values,[10,10]);
subdiag = find(tril(ones(10),-1));
matrix_subdiag = matrix(subdiag);
subdiag_sum = sum(matrix_subdiag);
disp(matrix_subdiag(1:10))
disp(subdiag_sum)
输出:
23.4.5.6.7.8.91013
1530
我在Python中的尝试
import numpy as np
matrix = np.arange(1,101).reshape(10,10)
matrix_t = matrix.T #to match MATLAB arrangement
matrix_subdiag = matrix_t[np.tril_indices((10), k = -1)]
subdiag_sum = np.sum(matrix_subdiag)
print(matrix_subdiag[0:10], subdiag_sum))
输出:[2 3 13 4 14 24 5 15 25 35]1530
如何获得相同的订单输出?我的错误在哪里?
谢谢!
对于和,直接在非转置矩阵上使用numpy.triu
:
S = np.triu(matrix, k=1).sum()
# 1530
对于索引,numpy.triu_indices_from
和作为扁平阵列的切片:
idx = matrix[np.triu_indices_from(matrix, k=1)]
输出:
array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20,
24, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 46, 47, 48, 49,
50, 57, 58, 59, 60, 68, 69, 70, 79, 80, 90])