2017-03-25 94 views
1

我试图将一系列值映射到变量,如下所示。函数containers.Map似乎没有帮助。我想知道是否有任何内置的功能。有没有办法将数值映射到MATLAB中的一系列数字?

例如:范围是5.27之间5.32,有许多子范围

R1 = 5.27 to 5.279, 
R2 = 5.28 to 5.289, 
R3 = 5.29 to 5.299, 
R4 = 5.30 to 5.309, 
R5 = 5.31 to 5.319 & 
R6 = 5.32 to 5.329. 

我想赋值为这些范围,如

R1 = 150    R2 = 160   R3 = 170 
R4 = 180    R5 = 190   R6 = 200. 

请帮帮忙!谢谢。

回答

2

假设你的范围都是一致的,你可以简单地应用一个线性变换来帮助你达到你想要的范围。

请注意,您的值的最小值是5.27,最大值是5.33,每个bin的范围是0.01。因此,将候选值减去5.27,除以0.01,以便通过取floor来确定它映射到哪个箱(即从0到5)。

你也知道你在新范围内的最小值是150,步数为10可以进入下一个bin。因此,简单地采取新的步长,乘这个二进制数值,并与150添加假如你的旧值存储在query,你会因此做:

norm_val = floor((query - 5.27)/0.01); 
new_val = 150 + 10 * norm_val; 

显示这个工作的一个例子。假设我们有以下查询:

>> query = [5.285 5.298 5.312] 

query = 

    5.2850 5.2980 5.3120 

通过代码运行,我们得到:

>> new_val 

new_val = 

    160 170 190 

我们可以看到,价值5.285映射到第二仓,这是160的5.298地图的价值到第三个bin,即170.最后,5.312的值映射到第五个bin,即190.

1

使用discretize来装箱数据。

假设x包含数据,设置箱的边缘和要分配的值。 discretize函数将为每个值分配箱号。使用二进制数作为索引到R值向量中。

Rvals = [150:10:200]; 
edges = [5.27:.01:5.33]; 
bins = discretize(x, edges); 
binnedData = Rvals(bins); 
相关问题