【问题标题】:How to use a look up table in MATLAB如何在 MATLAB 中使用查找表
【发布时间】:2010-10-15 08:26:54
【问题描述】:

我需要对一组 2D 数组(如果需要,可以使用 3D 矩阵)执行两个参数(一组:t,另一个来自数组)的指数运算。 f(t,x) = exp(t-x) 然后我需要添加第三维中每个值的结果。因为使用bsxfun 执行整个操作需要太多时间,所以我正在考虑使用查找表。

我可以将表创建为矩阵LUT(由于两个参数,是二维的),然后我可以使用LUT(par1,par2) 检索值。但是使用循环访问第三维也很昂贵。

我的问题是:有没有办法实现这种机制(查找表)以具有预定义的值,然后只使用它们从矩阵元素(索引类型)访问而无需循环。或者,如何创建 MATLAB 自动处理的查找表以加快指数运算?

编辑: 我实际上使用类似的方法来创建 LUT。现在,我的问题实际上是如何以有效的方式访问它。

假设我有一个二维数组M。对于那些我想将函数f(t,M(i,j)) 应用于固定值t 的值。我可以使用循环遍历 M 的所有值 (i,j)。但我想要一种更快的方法,因为我有一组 M,然后我需要将此过程应用于所有其他值.

我的函数比我给出的例子稍微复杂一点:

pr = mean(exp(-bsxfun(@rdivide,bsxfun(@minus,color_vals,double(I)).^2,m)./2),3);

这是我的实际功能,您可以看到它比我提供的示例更复杂。但想法是一样的。它在 M 集合的第三维中求两个数组差的指数的平均值。

希望对您有所帮助。

【问题讨论】:

  • 你为什么不发布你已经拥有的代码..
  • 您知道exp(t-x)=exp(t)/exp(x),因此您只需要一个exp() 的查找表。

标签: optimization matlab lookup-tables


【解决方案1】:

我同意这个问题不是很清楚,显示一些代码会有所帮助。反正我会试试的。

为了让 LUT 完全有意义,t-x 获得的值集必须受到限制,例如整数。

假设指数可以是 -1000 到 1000 之间的任何整数,您可以这样创建 LUT:

LUT = exp(-1000:1000);

然后创建索引(假设 t 是一维数组,x 是二维数组)

indexArray = bsxfun(@minus,reshape(t,[1,1,3]), x) + 1001; %# -1000 turns into 1

最后,你创建你的结果

output = LUT(indexArray);
%# sum along third dimension (i.e. sum over all `t`)
output = sum(output,3);

【讨论】:

  • 谢谢,我在 sub2ind 函数的帮助下使用了您的解决方案。遗憾的是,使用 LUT 比使用 bsxfun 执行操作要慢。
【解决方案2】:

我不确定我是否理解你的问题,但我认为这就是答案。

x = 0:3
y = 0:2
z = 0:6

[X,Y,Z] = meshgrid(x,y,z)

LUT = (X+Y).^Z

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2016-09-10
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多