Matlab到Python提取下亚对角三角形,为什么顺序不同



我正在将代码从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])

相关内容

  • 没有找到相关文章

最新更新