1

给定 F,一个 nx2 分数矩阵 ( [num1, den1; num2, den2; ...]),如何有效地计算它们相加得到的分数?(即[F(1,1)*F(2,2)*...*F(n,2) + F(1,2)*F(2,1)*F(2,3)*...*F(n,2) + ... , F(1,2)*...*F(n,2)])。结果不必是不可约的形式,重点是效率(意思是矢量化,而不是 C 代码)。

4

1 回答 1

3

您可以使用arrayfun将函数应用于数组,并prod获取产品

p = prod(F(:,2));
G = arrayfun(@(x, y) x * p / y, F(:,1), F(:,2));

那么你的答案是

[sum(G), p]

或者您可以按照 Divakar 建议的方式以矢量化方式进行操作

p = prod(F(:,2));
G = F(:,1).*(p./F(:,2));
[sum(G), p]

我在 50x2 阵列上测试了 1000 次,结果是

Elapsed time is 0.594867 seconds.
Elapsed time is 0.012170 seconds.

所以确实矢量化的方式要快得多。

于 2016-04-05T09:28:19.820 回答