我正在尝试将C ++代码移植到Java。
该片段如下:
uint32_t maxNumSource = newLayer.size.x * newLayer.size.y;
for (auto &plane : newLayer.flatConvolveMatrix) {
std::for_each(std::begin(plane), std::end(plane), [maxNumSource](float &weight) {
weight = (float)(((randomFloat() * 2) - 1.0f) / sqrt(maxNumSource));
});
}
其中flatConvolveMatrix是newLayer的成员,声明如下:
vector<vector<float>> flatConvolveMatrix;
我不确定在C ++中,'weight'变量是如何处理的。进入for_each循环作为参数,对吧? '[maxNumSource]'的含义是什么?
到目前为止,在Java中我提出了:
Integer maxNumSource = newLayer.size.x * newLayer.size.y;
for ( Vector<Double> plane : newLayer.flatConvolveMatrix ) {
double weight = 0;
for ( Double value : plane ) {
weight += randomFloat() * 2 - 1.0 / Math.sqrt(maxNumSource);
}
}
我的解释是否正确?
答案 0 :(得分:3)
[maxNumSource]
部分是lambda的捕获列表,它允许lambda在其体内使用变量maxNumSource
的副本。
不,有一个错误:
C ++版本修改plane
中的元素,而Java版本则不修改。它应该是:
for (Double value : plane)
value = (randomFloat() * 2 - 1.0) / Math.sqrt(maxNumSource);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
operator precendence :)
^^^^
modifies the current 'value' in 'plane'