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

MATLAB中如何归一化hist()函数生成的直方图并修复报错

报错根因

你调用的是旧版hist()函数,它的返回值是和bin等长的计数数值数组,不是直方图对象,不存在.Values、.BinWidth这类对象属性,因此用点索引访问属性时会触发"Dot indexing is not supported for variables of this type"报错。

手动归一化实现(不依赖histogram内置归一化)

你不需要从返回值里取计数和bin宽度,这两个值你本身就已经定义/获取到了:

  • f = hist(x,bin)得到的f本身就是每个bin对应的样本计数,不需要再访问.Values
  • bin宽度是你生成bin序列时设置的步长,这里是0.5,不需要从对象属性读取

修正后的完整代码如下:

N = 1000;
mu = 5; stdev = 2;
x = mu+stdev*randn(N,1);
bin = mu-6*stdev:0.5:mu+6*stdev;
f = hist(x,bin);
plot(bin,f,'bo');

% 归一化逻辑:直方图总面积为1,对齐概率密度
counts = f;
sum_counts = sum(counts);
width = 0.5; % bin序列步长即单bin宽度
f_normalized = counts / (sum_counts * width);

% 绘制归一化结果
figure;
plot(bin, f_normalized, 'bo', 'MarkerFaceColor','b');
hold on
% 叠加理论正态分布PDF做验证
pdf_curve = normpdf(bin, mu, stdev);
plot(bin, pdf_curve, 'r-', 'LineWidth',1.5);
legend('手动归一化直方图','理论正态分布PDF');
hold off

归一化逻辑说明:每个bin的矩形高度为「bin内样本数/(总样本数*bin宽度)」,所有bin的矩形面积之和为1,完全匹配概率密度的定义,可以直接和理论分布PDF做对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:06:32