我有一个矩阵,比如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矩阵来提取对角线。
答案 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))