我得到了长度为ind
的索引数组len
,其为0
或1
。我需要将来自复杂且耗时的函数func
的结果存储在结果向量res
(也是长度len
)中。输入向量称为inp
。
我可以通过以下两种方式做到这一点:
% 1st way:
res = zeros(len,1);
res(ind) = func(inp);
% 2nd way:
res = ind .* func(inp);
我对2 nd 的问题:对于ind
为0
的那些条目,MATLAB是否评估func()
?我希望不会,因为其他任何事情都是零,所以评估func
是一种浪费。
答案 0 :(得分:3)
对于ind为0的那些条目,您的第一个选项将无效,因为res(ind)
将引发错误:
下标索引必须是实数正整数或逻辑。
无论如何,我认为这就是你要找的东西:
allowed_indices = ind > 0; % Logical indexing of valid indices
res = zeros(len,1);
res(allowed_indices) = func(inp(allowed_indices));
答案 1 :(得分:1)
它可能会这样做,但是通过将测试func
打印到控制台然后制作所有ind
0
并查看是否打印,您可以轻松进行测试任何事情(我相信它会,但我没有MATLAB来检查自己)。
我希望不,因为零时间......否则为零
不一定,0*inf
怎么办?或0*NaN
?
如果问题的重点更有效,请使用timeit