我正在将代码从MatLab翻译成Python.我需要求出矩阵的下次对角线值.我在python语言中的try 似乎提取了相同的值(sum等于),但顺序不同.这是一个问题,因为我需要在之后使用Corrcoef.

最初的MatLab代码使用一组索引来子集一个矩阵.

MATLAB code:

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)

Output:
2 3 4 5 6 7 8 9 10 13

1530

My attempt in 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])

Python相关问答推荐

Python pint将1/华氏度转换为1/摄氏度°°

pandas fill和bfill基于另一列中的条件

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

删除特定列后的所有列

如何在Gekko中处理跨矢量优化

没有内置pip模块的Python3.11--S在做什么?

如何为需要初始化的具体类实现依赖反转和接口分离?

PYTHON中的selenium不会打开 chromium URL

在一个数据帧中,我如何才能发现每个行号是否出现在一列列表中?

利用广播使减法更有效率

Python键盘模块不会立即检测到按键

将CONTEXT_PROCESSOR数据返回到html进行循环时出现问题

为列PANAS中的每个字符串值创建累计和列

将函数拟合到曲线上,然后删除某些点

Django中带有ForeignKey的抽象模型无法按预期继承

从Pandas Dataframe导出Excel透视表

不理解它怎么会是索引错误:列出索引超出范围

形状摘要_绘图的子图

基于多个条件和未知数的数据抽取算法

如何防范误导标准库?