a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
如何调用一个函数来获取向量v[i] = a[b[i],i]
?
答案 0 :(得分:5)
v = a(sub2ind(size(a), b, 1:length(b)))
sub2ind
将下标转换为单个索引。
答案 1 :(得分:0)
要尝试的另一件事,保持与您的描述非常接近,您可以使用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
具有相似的用途,并且奇怪地赋予权力。 This Joel article说服我成为一个信徒。