Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我需要对一组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); 更多&回答... |
![]() |
![]() |