首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以将数值映射到MATLAB中的数字范围?

有没有一种方法可以将数值映射到MATLAB中的数字范围?
EN

Stack Overflow用户
提问于 2017-03-25 05:16:34
回答 2查看 365关注 0票数 1

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

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

代码语言:javascript
运行
复制
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.

我想为这些范围中的每一个赋值,例如

代码语言:javascript
运行
复制
R1 = 150                R2 = 160           R3 = 170
R4 = 180                R5 = 190           R6 = 200.

请帮帮我!谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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中,那么您可以这样做:

代码语言:javascript
运行
复制
norm_val = floor((query - 5.27) / 0.01);
new_val = 150 + 10 * norm_val;

一个例子说明了这一点。假设我们有以下查询:

代码语言:javascript
运行
复制
>> query = [5.285 5.298 5.312]

query =

    5.2850    5.2980    5.3120

运行我们得到的代码:

代码语言:javascript
运行
复制
>> new_val

new_val =

   160   170   190

我们可以看到,值5.285映射到第二个bin,即160。5.298的值映射到第三个垃圾箱,即170个。最后,5.312的值映射到第五桶,即190个。

票数 2
EN

Stack Overflow用户

发布于 2017-03-25 06:25:48

使用discretize存储数据。

假设x包含数据,则设置回收箱的边缘和要分配的值。discretize函数将为每个值分配bin号。将bin数字用作R值向量的索引。

代码语言:javascript
运行
复制
Rvals = [150:10:200];
edges = [5.27:.01:5.33];
bins = discretize(x, edges);
binnedData = Rvals(bins);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43012821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档