Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中使用查找表

我需要对一组2D数组(如果需要,可以使用3D矩阵)执行两个参数(一组:t,另一组来自数组)的指数运算。 f(t,x)= exp(tx)然后我需要在第三维中添加每个值的结果。因为使用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的集合的第三维中进行平均。

希望能有所帮助。



回答:

我同意这个问题不是很清楚,并且显示一些代码会有所帮助。无论如何我都会尝试。

为了使LUT完全有意义,必须将tx获得的一组值限制为例如整数。

假设指数可以是-1000到1000之间的任何整数,则可以创建如下的LUT:

LUT = exp(-1000:1000); 然后创建索引(假设t是一维数组,而x是2D数组)

indexArray = bsxfun(@minus,reshape(t,[1,1,3]), x) + 1001; %# -1000 turns into 1 最后,您创建结果

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

更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:51


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.