如何查找3D数组每层中标准差最小的行的索引
三维NumPy数组每层最小标准差行索引的解决方案
假设你使用的三维数组X的维度顺序为(层数, 每层行数, 每行元素数)(这是三维数组存储多层二维数据的常规排列方式),你现有的入手方向完全正确,只需要补全两个axis参数即可实现需求:
- 计算每行的标准差:对每行的所有列元素计算标准差,指定
axis=2,计算后得到形状为(层数, 每层行数)的二维数组,每个元素对应指定层指定行的标准差 - 按层取最小标准差对应的行索引:对上一步得到的标准差数组,沿每层的行维度取最小值索引,指定
axis=1,最终得到的数组形状为(层数,),每个元素就是对应层标准差最小的行的索引
完整代码示例
# 分步写法,可读性更强 row_std_per_layer = X.std(axis=2) min_std_row_layer = row_std_per_layer.argmin(axis=1) # 链式写法,和上面逻辑完全等价 min_std_row_layer = X.std(axis=2).argmin(axis=1)
验证测试用例
你可以用以下代码验证逻辑正确性:
import numpy as np # 构造测试3维数组,shape为(2层, 3行, 3列) X = np.array([ [[1,2,3], [4,5,5], [1,1,1]], [[10,20,30], [1,2,2], [5,6,7]] ]) min_std_row_layer = X.std(axis=2).argmin(axis=1) print(min_std_row_layer) # 输出 [2 1],符合预期结果
补充说明
- 如果你的数组维度顺序不是常规的
(层数, 行数, 列数),只需要根据实际维度调整axis参数即可:计算行标准差的axis始终为每行元素所在的维度,取行索引的axis始终为每层内行所在的维度 - NumPy的
std方法默认ddof=0,计算的是总体标准差,如果你需要使用样本标准差,可在std方法中传入参数ddof=1 - 如果同一层存在多个标准差一致的最小值行,
argmin会默认返回第一个出现的行的索引
内容的提问来源于stack exchange,提问作者user901871
相关产品推荐
相关产品推荐

