Ian*_*ton 13 java arrays performance vector multiplication
(如果之前有人问过道歉 - 我不敢相信它没有,但我找不到一个.也许我的搜索功能很弱.)
多年来,我已经"知道"Java没有缩放数组的本机函数(即将每个元素乘以常量).所以我一直这样做:
for (int i=0; i<array.length; i++) {
array[i] = array[i] * scaleFactor;
}
Run Code Online (Sandbox Code Playgroud)
这实际上是最有效的方式(例如,在这个应用程序中,它是一个大约10000个双倍的数组)?或者,还有更好的方法?
我可以提供的其他建议是懒惰的比例,你只需要支付乘法访问每个元素的成本; 例如
public class MyArray {
private final double[] arr;
private double scale = 1.0;
public MyArray(double[] arr) {
this.arr = arr;
}
public double getScale() {
return scale;
}
public void setScale(double scale) {
this.scale = scale;
}
public double elementAt(int i) {
return arr[i] * scale;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这在某些情况下更好:
在其他情况下,它是一种微优化,对现代CPU没有任何实际好处.
"更好的方式"是写array[i] *= scaleFactor;
而不是array[i] = array[i] * scaleFactor;
.:-)
实际上,这只是语法糖 - 编译后的输出(以及性能)应该完全相同.正如乔恩所说,你不可能获得更好的表现,但就个人而言,我会减少任何一天的打字.
归档时间: |
|
查看次数: |
12907 次 |
最近记录: |