我试图将一系列值映射到变量,如下所示。函数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.
请帮忙!感谢。
答案 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);