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

在1D数组上使用scikit-image metrics报错的解决方法咨询

修复skimage指标在一维信号上的错误

1. 解决variation_of_information和adapted_rand_error的TypeError

这两个指标是为图像分割任务设计的,要求输入是整数类型的分割标签(比如标记每个像素所属区域的整数ID),而非连续数值的信号。你的clean_signal和noisy_signal都是float64类型的连续值,自然会触发类型错误。

修复建议:

  • 若要衡量连续信号的差异,换用适配的指标:比如mean_squared_error、修复后的peak_signal_noise_ratio、structural_similarity(需调整参数适配一维数据)。
  • 若非要尝试用这两个指标(不推荐,不符合使用场景),可将信号转为整数(比如放大后取整),但结果无实际意义:
# 仅作演示,不建议用于实际任务
clean_int = (clean_signal * 10).astype(int)
noisy_int = (noisy_signal * 10).astype(int)
M.variation_of_information(noisy_int, clean_int)
M.adapted_rand_error(noisy_int, clean_int)

2. 解决peak_signal_noise_ratio的ValueError

PSNR默认假设输入是标准图像格式的数值范围(比如uint8的0-255、float的0-1),但你的clean_signal取值范围是1到9.9,超出了默认预期,因此需要手动指定data_range参数,值为真实信号的最大值减去最小值。

修复代码:

# 计算真实信号的数值范围
data_range = clean_signal.max() - clean_signal.min()
# 手动传入data_range参数
M.peak_signal_noise_ratio(noisy_signal, clean_signal, data_range=data_range)

完整可运行代码

import numpy as np 
import skimage.metrics as M

clean_signal = np.arange(1,10, .1)
noisy_signal = clean_signal + np.random.normal(0,1,90)

# 正常运行的MSE指标
mse = M.mean_squared_error(noisy_signal, clean_signal)
print(f"MSE: {mse}")

# 修复后的PSNR指标
data_range = clean_signal.max() - clean_signal.min()
psnr = M.peak_signal_noise_ratio(noisy_signal, clean_signal, data_range=data_range)
print(f"PSNR: {psnr}")

# 分割指标的演示用法(不推荐)
clean_int = (clean_signal * 10).astype(int)
noisy_int = (noisy_signal * 10).astype(int)
vi = M.variation_of_information(noisy_int, clean_int)
print(f"Variation of Information: {vi}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:00:21