评估参数化指数的矩阵

时间:2014-08-25 23:19:16

标签: arrays matlab

我有一个矩阵,比如F= magic(8),其元素在两个维度中由x和y在1:N中表示。 我有一个(1-D)参数,指定可能坐标(x,y)的子集,即x(b(k))和y(b(k)),大小(b)= [M,1]给我吗 M坐标(x(b(k)),y(b(k)))我要评估F. 是否可以在没有写入for循环的情况下访问k = 1:M的F((x(b(k)),y(b(k))))? 我正在寻找一个运行循环的更快的解决方案

F= magic(8)
for k=1:M
    do_something_on(F((x(b(k)),y(b(k)))))
end

请注意,如果我写

F((x(b(1:M)),y(b(1:M)))

我得到一个M x M矩阵,其中对角元素是我正在寻找的,但我宁愿不构建整个M x M矩阵来提取对角线。

2 个答案:

答案 0 :(得分:2)

您可以使用:

,而不是为您提供矩阵的F(x(b), y(b))
arrayfun(@(bk) F(x(bk), y(bk)), b)

或:

F(sub2ind(size(F), x(b), y(b)))

答案 1 :(得分:1)

我可能找到了解决方案,我必须使用矢量化形式作为矩阵F,即F(:),并在(y-1)*size(F,1)+x中进行评估,即

F((y(b)-1)*size(F,1)+x(b))