0

例如,我有大小为 50*50 的其他矩阵 A 的索引的矩阵 a。

 2    21     1
 2    41     1
 2    47     1
 2    50     1

我希望在每个步骤中乘以例如第 1 行


第 2 行的 A(2,21)*A(21,1)

A(2,41)*A(41,1)

.
.

所以,我使用这段代码

for i=1:nrow
c=ncol;
   if c~=1
   mul(i)=mul(i)*A(a(i,c-1),a(i,c));
   c=c-1;
   end
end

有没有更高效的代码?

4

3 回答 3

3

您可以使用sub2indprod

mul=prod(A(sub2ind(size(A),a(:,1:end-1), a(:,2:end))),2);
于 2013-08-12T12:13:30.780 回答
1

调用你的索引矩阵 I,尝试这样的事情:
mul = A(I(:,1),I(:,2)) * A(I(:,2),I(:,3))看看 matlab 是否可以为你优化它。
我在 matlab 表示法中相当生疏,所以请原谅如果陈述只是简单地不起作用。

编辑:我想我不完全理解你想要完成什么。

于 2013-08-12T12:10:20.527 回答
1

一个一般的班轮:A(sub2ind(size(A), I(:, 1), I(:, 2))).*A(sub2ind(size(A), I(:, 2), I(:, 3)))

例如:

 I= [2    5     1;
 2    4     1;
 2    3     1;
 2    1     1]

 A= rand(5, 5)


A(sub2ind(size(A), I(:, 1), I(:, 2))).*A(sub2ind(size(A), I(:, 2), I(:, 3)))
于 2013-08-12T12:11:44.940 回答