如何计算pandas矩阵中各条对角线上元素的中位数?
实现代码
你可以通过翻转矩阵后提取平行对角线的方式快速实现需求,代码如下:
import numpy as np import pandas as pd # 你的原始矩阵 df_matrix = pd.DataFrame(np.random.random((10, 10))) # 转换为numpy数组后左右翻转,将反对角线方向转为普通主对角线方向 flipped_mat = np.fliplr(df_matrix.values) # 生成结果向量 median_vec = [] for offset in range(10): # 提取对应偏移量的对角线元素 diag_items = np.diag(flipped_mat, k=offset) # 计算中位数,单元素场景下中位数就是元素本身,无需额外判断 median_vec.append(np.median(diag_items)) # 可选:转为numpy数组格式 median_vec = np.array(median_vec)
原理解释
你需要的10条对角线是平行于矩阵反对角线(右上到左下走向)的序列,元素个数从10逐个递减到1:
- 先对原始矩阵做左右翻转,原本的反对角线方向就会变成和普通主对角线(左上到右下)一致的方向
- 用
np.diag指定偏移量k从0到9,即可依次提取长度为10到1的对应对角线 np.median对长度为1的数组会直接返回该元素本身,天然符合你最后一个元素无需计算中位数的要求
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

