Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 不必要的计算是可以避免的吗?_Matlab_Optimization_Lazy Evaluation - Fatal编程技术网

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
(也是length
len
)中。输入向量称为
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
为零。