给定 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 代码)。
问问题
127 次
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 回答