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

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

b = [1 2 3];

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

2个回答

5
v = a(sub2ind(size(a), b, 1:length(b)))

sub2ind将下标转换为单个索引。


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 有类似的用途,并且具有神奇的威力。这篇Joel文章 让我成为了信徒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接