意想不到的四舍五入的数字由matlab ? ? ?为什么它发生?

53视图(30天)
亲爱的社区,
谁能解释我为什么Matlab舍入我的数据在指定的变量值(s) (s) ? ? ? ?
描述 :
我的代码开始自己舍入值在数据分析,然而,这是很好地工作了几个月前。在执行期间我提取数据的代码 y_lim ybin :
h = binscatter (x, y, 250,“FaceAlpha”1);
h。ShowEmptyBins =“关闭”;
甘氨胆酸ax =;
ax.YScale =“日志”;
斧子。XLim = (20 [2]);
y_lim = h.YLimits
ybin = h.YBinEdges
在工作区中给出的结果显然是错误的: y_lim = ( 0,1.005 ]
如果在命令窗口我看 h 处理程序的属性,我看到正确的数据:
YLimits (1.002305238077898 e-06 1.002305238077898 e + 00):
好吧……然后我试图访问处理器h命令窗口,我得到了一个正确的结果:
> > h.YLimits
ans = 1.002305238077898 e-06 1.002305238077898 e + 00
下一步让我疯了。我分配变量y lim使用相同的命令就像我使用的代码和得到正确的值:
> > y_lim = h.YLimits
y_lim =
1.002305238077898 e-06 1.002305238077898 e + 00
谁能帮我解决这个问题? ? ?这是matlab错误还是我不明白一些事情。
13个评论
dpb
dpb 2021年6月18日
编辑:dpb 2021年6月18日
你当然可以节省一个小例子(ish)数据集和附加代码…不需要450 mb的数据来说明问题。
别人已经告诉你要做什么——在.mat文件保存数据变量,而不是数据易用性和速度。
即使它是低效的,.fig文件仍包含所有的数据 X | YData 变量也可以很容易地证明,所以会有另一个数据集下载从先前的问?有变量,说明不同大小的类似的问题,所以会用它来说明—
> >格式,格式紧凑的
> > [[min(数据(:1))max(数据(:1))];[min(数据(:,2))max(数据(:,2))))
ans =
1.0 e + 12 *
1.587081600000000 - 1.587168000000000
0.000000000000762 - 0.000000000836381
> >格式,格式紧凑的
> > [[min(数据(:1))max(数据(:1))];[min(数据(:,2))max(数据(:,2))))
ans =
1.0 e + 12 *
1.5871 - 1.5872
0.0000 - 0.0000
> > [min(数据(:,2))max(数据(:,2)))
ans =
0.7615 - 836.3806
> >格式,格式紧凑的
> > [min(数据(:,2))max(数据(:,2)))
ans =
1.0 e + 02 *
0.007615482200000 - 8.363806400000000
> >
显示了明显的各级“四舍五入”显示的值取决于所选择的显示格式,哪些变量是试图显示在一起,MATLAB规模已经让他们在一起。
现在我们将情节看看图…
> > isOK = isfinite(数据(:,2));%碰巧有一群南;我们将跳过他们
> > hL =情节(数据(isOK, 1),数据(isOK 2));%的阴谋
> > (hL.YData。= =所有数据(isOK 2))%比较输入数据图的副本
ans =
逻辑
1
> > (hL.XData。= =所有数据(isOK 1))
ans =
逻辑
1
> >
显示所有图中的值数据属性是一样的内存数据完整的精度;没有舍入。
现在
> > savefig (“Data.fig”)%写出.fig文件
> >关闭所有%完全接近这一数字
> >高频= openfig (“Data.fig”);%加载已保存的图
> >明确霍奇金淋巴瘤%完全摆脱旧线处理,
甘氨胆酸> > hAx =; hL = hAx.Children;%从加载图检索行处理
> > (hL.XData。= =所有数据(isOK 1))再次%和比较原始数据数组
ans =
逻辑
1
> > (hL.YData。= =所有数据(isOK 2))
ans =
逻辑
1
> >
MATLAB已经 做任何舍入……虽然是一个低效率的存储机制,没有丢失,如果有人需要重新生成数据,那么它可能节省一些时间,如果他们之前已经进行了广泛的定制的储蓄。
> >! dir data.fig
体积在驱动器C是操作系统
体积编号是3260 - 4552
目录的C:\Users\Duane\Documents\MATLAB\Work
06/18/2021 10:3035193 Data.fig
1文件35193字节
0 Dir (s) 803652620288字节免费的
> > XY =数据(isOK 1:2);
> >谁XY
的名字大小字节属性
XY342 x25472年
> >保存dataXYXY
> >! dir dataXY.mat
体积在驱动器C是操作系统
体积编号是3260 - 4552
目录的C:\Users\Duane\Documents\MATLAB\Work
06/18/2021晚10点3643 dataXY.mat
1文件3643字节
0 Dir (s) 803652603904字节免费的
> >
.fig文件中显示大约10倍的开销相比只是在.mat文件保存数据本身
道德是——你所做的比你认为你所做的不同的东西——我们不能诊断可能没有什么完整的细节,但你需要附加的东西这里说明你做了什么指望有人完全诊断问题的根源。

登录置评。

答案(2)

Sergii Snegir
Sergii Snegir 2021年6月21日
亲爱的dpb和所有用户,
封闭的两个文件。MLX文件是我使用的原始代码处理数据(第83行)。在第83行我阴谋x, y数据使用直方图函数。这个x, y,数据你会发现在另一个垫子文件(封闭)。
我需要保存到垫文件:x_lim = h.XLimits;y_lim = h.YLimits,数量= h.Values;xbin = h.XBinEdges;ybin = h.YBinEdges
在保存他们,我有“圆”数据。而不是YLimits (1.0023 e-06 1.0023):在处理程序(我看到h),我有出口
> > h.YLimits
ans =
0.0000 - 1.0023
3评论
约翰D 'Errico
约翰D 'Errico 2021年6月22日
请不要用一个答案就发表评论或回应其他评论。

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2021年6月22日
进入MATLAB - >变量- >首选项- >格式
并设置“长g”
进入MATLAB - >首选项- >命令窗口- >文本显示- >数字格式:
并设置“长g”
然后OK保存偏好的变化。
现在退出和重新输入MATLAB。
一旦你做到了这一点,那么变量浏览器,你依赖将默认显示“长g”格式的数据,和命令窗口将默认显示在“g”格式。MATLAB将重置为这两个“g”偏好每次开始MATLAB。
你被愚弄了的变量浏览器不受“格式”命令。
17日评论
ytzhak goussha
ytzhak goussha 2021年6月30日
如果问题是显示,试试multimpling数量显示为零的一个巨大的数字1 e10,如果是零结果将是零,如果是少量像1 e-6它将显示一个非零的结果

登录置评。

类别

找到更多的在编程工具帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!