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

使用SciPy bootstrap计算中位数差值时遇维度错误如何解决?

解决SciPy bootstrap计算中位数差值时的ValueError问题

我尝试用SciPy的bootstrap函数计算两组数据的中位数差值,官方示例能正常运行:

from scipy.stats import mood, norm

def my_statistic(sample1, sample2, axis):
    statistic, _ = mood(sample1, sample2, axis=-1)
    return statistic

sample1 = norm.rvs(scale=1, size=100)
sample2 = norm.rvs(scale=2, size=100)
data = (sample1, sample2)
res = bootstrap(data, my_statistic, method='basic')

但自行编写的中位数差值函数报错ValueError: zero-dimensional arrays cannot be concatenated:

import numpy as np

def median_diff(group1, group2, axis=-1):
    diff = np.median(group1) - np.median(group2)
    return diff

调整axis参数为0、1、-1都无效,完整报错回溯如下:

ValueError                                Traceback (most recent call last)
/tmp/ipykernel_259/1837026830.py in <cell line: 1>()
----> 1 boot = bootstrap(lab4data, median_diff, method="basic")

/usr/local/lib/python3.10/dist-packages/scipy/stats/_resampling.py in bootstrap(data, statistic, n_resamples, batch, vectorized, paired, axis, confidence_level, method, bootstrap_result, random_state)
    589         # Compute bootstrap distribution of statistic
    590         theta_hat_b.append(statistic(*resampled_data, axis=-1))
--> 591     theta_hat_b = np.concatenate(theta_hat_b, axis=-1)
    592 
    593     # Calculate percentile interval
/usr/local/lib/python3.10/dist-packages/numpy/core/overrides.py in concatenate(*args, **kwargs)
ValueError: zero-dimensional arrays cannot be concatenated

问题原因与修复方法

问题核心是你的median_diff函数返回的是0维标量,而bootstrap函数要求统计量返回至少1维的数组,这样才能通过np.concatenate拼接多次重采样的结果。官方示例中的mood函数本身就返回数组,所以能正常运行。

有两种简单的修复方式:

方式1:将结果包装为1维数组

import numpy as np

def median_diff(group1, group2, axis=-1):
    diff = np.median(group1) - np.median(group2)
    return np.array([diff])  # 把标量转为1维数组

方式2:正确传递axis参数给np.median

让np.median利用axis参数返回数组而非标量,同时兼容批量重采样的场景:

import numpy as np

def median_diff(group1, group2, axis=-1):
    return np.median(group1, axis=axis) - np.median(group2, axis=axis)

两种修改都能让函数返回符合要求的1维数组,从而避免拼接时的ValueError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:24