我试图将一系列的值映射到变量,如下所示。函数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.
请帮帮我!谢谢。
发布于 2017-03-25 06:46:45
假设你的范围都是均匀的,你可以简单地应用一个线性变换来帮助你达到你想要的范围。
请注意,您的值的最小值为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的值映射到第三个垃圾箱,即170个。最后,5.312的值映射到第五桶,即190个。
发布于 2017-03-25 06:25:48
使用discretize
存储数据。
假设x
包含数据,则设置回收箱的边缘和要分配的值。discretize
函数将为每个值分配bin号。将bin数字用作R值向量的索引。
Rvals = [150:10:200];
edges = [5.27:.01:5.33];
bins = discretize(x, edges);
binnedData = Rvals(bins);
https://stackoverflow.com/questions/43012821
复制相似问题