JavaScript对我来说不是一种熟悉的语言。我有一个逻辑要尝试优化速度。它在于查找二维数组(矩形)的argmax,行和列索引。目前,我有一个简单的实现
function argMax2d(arr) {
var rowMax = 0, colMax = 0;
for( var rowIndex = 0; rowIndex < arr.length; rowIndex++){
for( var colIndex = 0; colIndex < arr[rowIndex].length; colIndex++){
if (arr[rowIndex][colIndex] > arr[rowMax][colMax]){
rowMax = rowIndex;
colMax = colIndex;
}
}
}
return [rowMax, colMax];
}
在Python中,由于不利用数据的连续性,这将是完成工作的一种非常缓慢的方法。
PS:arr
始终为矩形,每行的列数相同
答案 0 :(得分:2)
根据问题中的评论,我认为唯一的 minimum 优化是缓存数组的长度,以避免在每次迭代中访问它们,对于用于比较。
function argMax2d(arr) {
var rowMax = 0,
colMax = 0,
vLength = arr.length,
hLength = arr[0].length,
maxValue = -Infinity;
for (var rowIndex = 0; rowIndex < vLength; rowIndex++) {
for (var colIndex = 0; colIndex < hLength; colIndex++) {
if (arr[rowIndex][colIndex] > maxValue) {
maxValue = arr[rowIndex][colIndex];
rowMax = rowIndex;
colMax = colIndex;
}
}
}
return [rowMax, colMax];
}