最近写的一个程序设计矩阵与向量的乘法,跑起来特别慢,因此利用jama包来提高运算速度,对比了一下矩阵相乘的速度:
jama 表示jama的运算速度,for表示最原始的for循环处理的速度:
matix元素的值是(-3,3)之间的一个浮点型随机数:
matrix size | 500*500 | 1000*1000 | 2000*2000 | 3000*3000 |
jama | <1s | 2s | 11s | 38s |
for | 1s | 17s | 41s | 575s |
exp快速运算:
在其他代码中看见运算exp运算的快速是实现,拿来比了下速度,似乎关系不大:
private static double fastExp(double val) {
final long tmp = (long) (1512775 * val + 1072632447);
return Double.longBitsToDouble(tmp << 32);
}
compare with 1000000 nums:
fastEXP begin :2014-01-03 11:11:23
faseEXP ends :2014-01-03 11:11:23
old begin :2014-01-03 11:11:23
old ends :2014-01-03 11:11:24
compare with 2000000 nums:
fastEXP begin :2014-01-03 11:11:24
faseEXP ends :2014-01-03 11:11:24
old begin :2014-01-03 11:11:24
old ends :2014-01-03 11:11:24
其中old begin 是指用Math.pow(Math.E,val)计算出来的值。从只粗算到秒的结果来看,这两者的区别并不大。
看来程序慢的原因还要慢慢找。