【问题标题】:How to map ranges of values in MATLAB如何在 MATLAB 中映射值的范围
【发布时间】:2013-07-11 14:25:39
【问题描述】:

我希望有一个类似于这个 Arduino 函数的 MATLAB 函数: http://arduino.cc/en/Reference/map

基本上,我有一个基于时间的变量,其中有 67 个数据点,范围从 0 到 1.15,我想将它从 0 映射到 100%(所以,101 个数据点)。在 Arduino 中,这看起来像:

map(value, fromLow, fromHigh, toLow, toHigh)

我可以在 MATLAB 中使用 interp1 来获取 101 个数据点,但我只得到 0 到 1.15 之间的 101 个数据点。我知道我可以将每个值乘以 100/1.15,但这是不精确的。在我忽略的 MATLAB 中有没有更优雅的方法来做到这一点?

(这篇文章看起来很有希望,但这不是我要找的: Map function in MATLAB?)

谢谢

【问题讨论】:

  • 在您链接到的 Arduino 参考页面上,他们甚至在底部提供了 map 函数的代码:(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;。请注意,这个函数似乎是用整数数学实现的,所以如果你想完全复制这个函数,你也需要在 Matlab 中这样做。
  • 我知道我可以根据 Arduino 代码编写自己的函数,我的问题是 MATLAB 中是否已经内置了可以执行此操作的功能。谢谢。

标签: matlab map arduino


【解决方案1】:

我的 FEX 提交 maptorange 可以做到这一点。它采用初始值、它们的来源范围以及它们应该映射到的范围,并返回映射的值。在您的示例中,这将是:

maptorange(values, [0 1.15], [0 100]);

(这是假设线性映射。脚本也可以沿指数函数映射。)

要从 67 到 101 个值,您确实需要插值。这可以在映射之前或之后完成。

【讨论】:

    【解决方案2】:

    如果你有可用的神经网络工具箱,那么你可以试试mapminmax 函数。默认情况下,函数映射到 [-1 1] 区间并从数据中获取输入边界。但我相信用你的值填充settings 结构然后调用mapminmax 应该会有所帮助。

    【讨论】:

    • 很酷,看起来几乎完美,而且我确实有那个工具箱。我唯一想不通的是如何设置 PS(处理设置),因为如果我可以将其设置为标准化为一定数量的值,我就会被设置。谢谢!
    • 您可以用您的数据填写PS。其中有 10 个字段。但是,以下只有 5 个字段的简单示例对我有用。 x = [1 2 3]; ps = struct('yrange', 1, 'ymin', 0, 'no_change', 0, 'xrange', 2, 'xmin', 1); y = mapminmax('apply', x, ps); 因此,您可以为每种需要的情况预先创建几个结构。
    【解决方案3】:

    你可以使用linspace,例如

    linspace(0,1.15,101)
    

    将在 0 和 1.15 之间平均分配 101 分。

    【讨论】:

    • 谢谢,但这对我来说并不适用。我有一个 x 和 f(x)。时间是 x,对于一个特殊情况,我有 67 个数据点,范围从 0 到 1.15,我想将它们映射为 101 个数据点,范围从 0 到 100。然后每个初始 x 点都有一个对应的 f(x) .所以我想这是一个两步的问题:首先,插入 x 和 f(x) 以获得正确数量的数据点,然后将 x 向量从初始范围“拉伸”到所需范围。
    • 我看不出这不仅仅是y = map(value, fromLow, fromHigh, fromLow, fromHigh); 的矢量化版本,即从一个范围映射到相同的确切范围。
    • 对不起,我当时没明白你的问题。让我试着在短时间内重新回答。看起来你只需要interp1,你得到的结果是不准确的?
    • 好的,谢谢!如果我接近 100/1.15,不精确的部分只是缩放,但如果我只是明确使用分数,我应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多