给定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代码)。
您可以使用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.
因此,矢量化的方式确实要快得多。