Matlab 不必要的计算是可以避免的吗?
我得到了一个长度Matlab 不必要的计算是可以避免的吗?,matlab,optimization,lazy-evaluation,Matlab,Optimization,Lazy Evaluation,我得到了一个长度len的索引数组ind,它是0或1。我需要一个复杂的时间密集型函数func的结果存储在结果向量res(也是lengthlen)中。输入向量称为inp 我可以通过以下两种方式做到这一点: % 1st way: res = zeros(len,1); res(ind) = func(inp); % 2nd way: res = ind .* func(inp); 关于第二个问题,我的问题是:对于那些ind为0的条目,MATLAB是否计算func()?我希望不是,因为零乘以任何其他
len
的索引数组ind
,它是0
或1
。我需要一个复杂的时间密集型函数func
的结果存储在结果向量res
(也是lengthlen
)中。输入向量称为inp
我可以通过以下两种方式做到这一点:
% 1st way:
res = zeros(len,1);
res(ind) = func(inp);
% 2nd way:
res = ind .* func(inp);
关于第二个问题,我的问题是:对于那些
ind
为0
的条目,MATLAB是否计算func()
?我希望不是,因为零乘以任何其他值都是零,所以评估func
可能是一种浪费,但这对您来说非常容易,您可以通过制作一个打印到控制台的测试func
,然后制作所有ind
0
并查看它是否打印任何内容来进行测试(我肯定会的,但我没有MATLAB来检查自己)
我希望没有,因为零乘以其他的是零
不一定,那么0*inf
或0*NaN
呢
如果你的问题是哪一个效率更高,那么使用两种方法进行测试可能都会,但这对你来说非常容易,通过制作一个打印到控制台的test
func
,然后将所有的ind
0
进行测试,看看它是否打印任何内容(我肯定会,但我没有MATLAB来检查自己)
我希望没有,因为零乘以其他的是零
不一定,那么0*inf
或0*NaN
呢
如果您的问题是哪一个更有效,请使用对ind为0的条目进行测试,您的第一个选项将不起作用,因为
res(ind)
将抛出一个错误:
下标索引必须是实正整数或逻辑数
无论如何,我想这就是你想要的:
allowed_indices = ind > 0; % Logical indexing of valid indices
res = zeros(len,1);
res(allowed_indices) = func(inp(allowed_indices));
对于ind为0的条目,您的第一个选项将不起作用,因为
res(ind)
将抛出错误:
下标索引必须是实正整数或逻辑数
无论如何,我想这就是你想要的:
allowed_indices = ind > 0; % Logical indexing of valid indices
res = zeros(len,1);
res(allowed_indices) = func(inp(allowed_indices));
回答您的问题:MATLAB计算
func
,即使ind
为零。回答您的问题:MATLAB计算func
,即使ind
为零。