gpt4 book ai didi

java - 如何使 Java 中的点积方法更快或更高效?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:05:47 24 4
gpt4 key购买 nike

我有一个小的 Java 方法,用于在输入 vector 和矩阵之间执行点积。这是代码:

    public void calcOutput() {
outputs = new float[output];
float sum = 0F;

for(int j = 0; j < output; j++) {
for(int i = 0; i < input; i++) {
sum += inputs[i] * weights[j][i];
}

outputs[j] = sum;
}
}

基本上,这应该做的是采用我的输入 vector “输入”,并使用我命名为“权重”的矩阵执行点积。然后将输出放置在输出 vector “outputs”中。

我怎样才能让它更快或更有效?如果有帮助,我的权重矩阵也不需要是矩阵。我只是需要一种方法来轻松访问相应的索引。

谢谢

最佳答案

不,没有比这更好的了。这是您可以实现的最简单的方法,该算法遵循良好的内存缓存方法,即外循环遵循数组的外索引,内循环遍历一个子数组中的元素。

也许对内部数组使用临时变量会有所帮助,但我想 JIT 会处理这个问题。

另外还有一个错误,sum 变量应该在外循环的范围内,而不是方法范围内。它需要在外循环的每次迭代中重置:

for(int j = 0; j < output; j++) {
// NOTE the line:
float sum = 0;
// and the reference to inner array:
byte[] row = weights[j];
for(int i = 0; i < input; i++) {
sum += inputs[i] * row[i];
}

outputs[j] = sum;
}

关于java - 如何使 Java 中的点积方法更快或更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40434418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com