有没有办法在MATLAB中将数值映射到一系列数字?

时间:2017-03-25 05:16:34

标签: matlab range mapping

我试图将一系列值映射到变量,如下所示。函数containers.Map似乎没有帮助。我想知道是否有任何内置函数可以做。

例如:范围在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 个答案:

答案 0 :(得分:2)

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

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

您还知道新范围内的最小值为150,步长为10,以转到下一个bin。因此,只需采用新的步长,乘以此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映射到第二个bin,即160. 5.298的值映射到第三个bin,即170.最后,5.312的值映射到第五个bin,即190。

答案 1 :(得分:1)

使用discretize来存储数据。

假设x包含数据,请设置分档的边缘和要分配的值。 discretize函数将为每个值分配bin编号。使用bin编号作为R值向量的索引。

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