我有一个映射(512x512
),其值在0.119
和0.2499
之间,并且我想将其用作概率图,因此我需要将此距离扩展到[0,1]
。如何将第一张地图的值映射到[0,1]
中?
如果您的数字x
当前位于区间[xmin xmax]
上,则下面的代码完成以下步骤[a]映射到[a b]
:1. x - xmin
将x
映射到间隔[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的情况,我给出了更一般的情况。
我想将矩阵中的值映射到新的范围,并且为此目的使用了[0 1]
函数,它对我有用。如果您还有其他建议,请告诉我。谢谢。