You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两组矩阵列表逐坐标t检验获取14×14 p值矩阵实现问题咨询

实现方案

核心逻辑

你需要对14×14网格的每一个坐标位置,分别提取A组10个样本、B组11个样本在该位置的数值,做独立样本t检验,将得到的p值填入结果矩阵对应坐标即可。

Python 实现(推荐)

依赖numpy做数组处理,scipy做t检验,优先用向量化操作,不需要手动写循环:

import numpy as np
from scipy.stats import ttest_ind

# 示例模拟数据,使用时替换为你自己的列表A、B
A = [np.random.rand(14, 14) for _ in range(10)]
B = [np.random.rand(14, 14) for _ in range(11)]

# 将列表转换为三维数组,形状分别为 (样本量, 14, 14)
arr_A = np.array(A)
arr_B = np.array(B)

# 沿样本维度(第0维)批量做t检验,直接得到14x14的t值矩阵和p值矩阵
# 方差齐用默认equal_var=True,方差不齐改设为False执行Welch's t检验
t_stats, p_matrix = ttest_ind(arr_A, arr_B, axis=0, equal_var=True)

# 验证输出维度,结果为(14,14)即符合要求
print(p_matrix.shape)

如果你偏好更直观的逐坐标循环写法(14×14的小维度下性能无差异),可以用如下代码:

import numpy as np
from scipy.stats import ttest_ind

p_matrix = np.zeros((14, 14))
for i in range(14):
    for j in range(14):
        # 分别提取两组对应坐标的所有样本值
        group_a_vals = [mat[i][j] for mat in A]
        group_b_vals = [mat[i][j] for mat in B]
        # 执行t检验,存储p值
        _, p_val = ttest_ind(group_a_vals, group_b_vals, equal_var=True)
        p_matrix[i][j] = p_val

补充说明

  • 如果后续需要做多重检验校正(比如FDR校正控制假阳性),可以调用scipy.stats.multitest.multipletests对展平的p值做校正后,再reshape回14×14的矩阵即可。
  • R语言实现思路完全一致:将两个列表转为三维数组后,用apply函数沿样本维度逐坐标调用t.test即可得到结果。

内容的提问来源于stack exchange,提问作者baptbapt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:36:03