如何对多三维数组对应元素执行单样本t检验并生成结果数组
解决三维数组对应元素的单样本t检验问题
核心思路
要实现每个对应位置元素的单样本t检验,关键是将多个数组在新增维度上堆叠,让每个位置的所有样本集中在这个新维度,再指定t检验函数沿该维度计算,最终得到与原数组维度一致的结果。
实现步骤与代码示例
- 导入依赖库
import numpy as np from scipy.stats import ttest_1samp
- 定义输入数组
a = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]]]) b = np.array([[[13,14,15,4], [1,6,9,10], [1,0,.5, .2]]]) c = np.array([[[0,0,1,2], [1,1,3,4], [4,1,11,17]]])
- 堆叠数组到新增维度
使用np.stack在最后一个维度(axis=-1)堆叠,这样每个原位置的元素会形成一个长度为3的样本集合,堆叠后的数组形状为(1, 3, 4, 3):
combined = np.stack([a, b, c], axis=-1)
- 执行单样本t检验
调用ttest_1samp,指定axis=-1沿样本维度计算,popmean是你要检验的总体均值(这里以0为例,可根据需求修改):
t_values, p_values = ttest_1samp(combined, popmean=0, axis=-1)
- 验证结果维度
此时t_values和p_values的形状均为(1, 3, 4),与原输入数组完全一致,每个位置存储对应元素的t值和p值。
为什么之前的方法不适用
np.vstack/hstack会改变原数组的维度结构(比如把多个(1,3,4)数组变成(3,3,4)),导致无法对应到原位置的样本集合。而np.stack新增维度的方式,能完美保留原数组的位置信息,让t检验可以精准针对每个位置的样本组计算。
内容的提问来源于stack exchange,提问作者Aswiderski
相关产品推荐
相关产品推荐

