如何在matlab中从矩阵的每一列中选择一个元素?

时间:2011-11-18 14:36:56

标签: matlab

a = [1 1 1; 2 2 2; 3 3 3];

b = [1 2 3];

如何调用一个函数来获取向量v[i] = a[b[i],i]

2 个答案:

答案 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

相关功能arrayfuncellfunstructfun具有相似的用途,并且奇怪地赋予权力。 This Joel article说服我成为一个信徒。