a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
我如何调用一个函数来获取一个向量 v[i] = a[b[i],i]
?
a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
我如何调用一个函数来获取一个向量 v[i] = a[b[i],i]
?
v = a(sub2ind(size(a), b, 1:length(b)))
sub2ind
将下标转换为单个索引。
还有一件事可以尝试,与您的描述非常接近,您可以使用arrayfun
函数。
首先定义一个将值x
映射到所需输出的函数。
fn = @(x) a(b(x), x);
然后在i向量中的每个输入上调用该函数。
i = 1:3;
v = arrayfun(fn, i);
或者,这一切可以在一行中以显而易见的方式完成:
v = arrayfun(@(x) a(b(x), x), 1:3);
arrayfun
仅仅是下面循环的简写形式:
for ixLoop = 1:3
v(ixLoop) = a(b(ixLoop),ixLoop);
end
相关的函数 arrayfun
,cellfun
和 structfun
有类似的用途,并且具有神奇的威力。这篇Joel文章 让我成为了信徒。