我如何将0.1和0.22之间的数字扩展到更大的距离0和1?

问题描述 投票:-1回答:2

我有一个映射(512x512),其值在0.1190.2499之间,并且我想将其用作概率图,因此我需要将此距离扩展到[0,1]。如何将第一张地图的值映射到[0,1]中?

matlab intervals
2个回答
0
投票

手动缩放:关注了许多与此相关的帖子(123),

如果您的数字x当前位于区间[xmin xmax]上,则下面的代码完成以下步骤[a]映射到[a b]:1. x - xminx映射到间隔[0 xmax-xmin],2. (x-xmin)./(xmax-xmin)x映射到间隔[0 1];请注意,x = xmin现在为0,x = xmax现在为1,[b]3.现在将(x-xmin)./(xmax-xmin)(x-xmin)./(xmax-xmin)相乘,将x映射到间隔[0 b-a],4.在a上加上((x-xmin)./(xmax-xmin)).*(b-a),将间隔移到[a b]

xmin = 0.119;               % current lowerbound for data
xmax = 0.2499;              % current upperbound for data
a = 0;                      % target lowerbound (under new scale)
b = 1;                      % target upperbound

A = xmin*ones(512) + (xmax-xmin)*rand(512);          % generate example current data

fh=@(x) ((x-xmin)./(xmax-xmin)).*(b-a)+a;            % rescaling function

A2 = fh(A);                                        

您可以分别将min(A(:))max(A(:))min(A2(:))max(A2(:))进行比较。

使用mapminmax()仔细查看mapminmax()的文档(请参阅“算法”),可以发现上述过程正是此函数正在执行的过程。只需将下面的mapminmax()替换为mapminmax(),然后与上面提供的“手动缩放”方法进行比较即可。注意[ymin ymax]作为附加假设(在下面复制)。

假定X仅具有有限的实数值,并且每一行的元素都不都是相等的。 (如果xmax = xmin或xmax或xmin是非限定的,则y = x且不会发生变化。)

[a b]

所以适当的用法看起来像

mapminmax()

[[a]致谢mapminmax()的@ y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;[b]由于需要A3 = mapminmax(A,a,b); ,这就是您所需要的。对于那些以S.Kolassa - Reinstate Monica为间隔this excellent answer的情况,我给出了更一般的情况。


-1
投票

我想将矩阵中的值映射到新的范围,并且为此目的使用了[0 1]函数,它对我有用。如果您还有其他建议,请告诉我。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.