首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中优化范数计算?

如何在Matlab中优化范数计算?
EN

Stack Overflow用户
提问于 2010-09-08 13:14:21
回答 3查看 1.9K关注 0票数 1

我想优化以下Matlab代码:

x=线性空间(-5,5,100);

Y=线性空间(-5,5,100);

Z=线性空间(-5,5,100);

xp,yp,zp = meshgrid(x,y,z);

范数= sqrt(xp.^2+yp.^2+zp.^2);

我使用realsqrt对其进行了一些改进:

norm_0 = sqrt(xp.^2+yp.^2+zp.^2) 10.106 s 37.0%

norm_1 = realsqrt(xp.^2+yp.^2+zp.^2) 10.100 s 35.0%

还有其他想法吗?

EN

回答 3

Stack Overflow用户

发布于 2010-09-09 14:41:29

  • sqrt()是昂贵的,所以请确保您确实需要它,或者--正如Jonas所指出的--如果您可以对数据中的radius
  • depending平方值进行阈值设置,那么在生成网格

之前,请使用关于范数对称性的知识来减少sqrt calculations

  • precalculate平方的数量。

类似于(未经测试的):

代码语言:javascript
复制
x = linspace(-5, 5, 100);
y = linspace(-5, 5, 100);
z = linspace(-5, 5, 100);
[xp2, yp2, zp2] = meshgrid(x(1:end/2).^2, y(1:end/2).^2, z(1:end/2).^2);
norm_quadrant = sqrt(xp2 + yp2 + zp2);
norm_temp1 = cat(1, norm_quadrant, flipdim(norm_quadrant, 1));
norm_temp2 = cat(2, norm_temp1, flipdim(norm_temp1, 2));
norm_complete = cat(3, norm_temp2, flipdim(norm_temp2, 3));
票数 3
EN

Stack Overflow用户

发布于 2010-09-08 13:56:54

我怀疑这条单线是否能得到很好的优化。但是,要花10秒的时间,我猜它是在循环中调用的,这意味着有可能优化整个函数。

此外,你可能试图在某个地方创建一个圆圈,通过阈值半径。与其使用平方根,不如对半径的平方设置阈值,从而使代码更快。

票数 1
EN

Stack Overflow用户

发布于 2010-09-08 13:23:38

只需使用标准的范数函数,它很可能是用C实现的,这使得在Matlab中在多个步骤中完成任何事情都更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3668080

复制
相关文章

相似问题

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