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