x 좌표, y 좌표 및 행렬 값이있는 하위 배열이 포함 된 배열이 있습니다.
// [x,y,value]
var arr = [
[1,2,0.01],
[1,3,0.02],
[1,4,0.05],
[1,5,0.03],
[2,3,0.04],
[2,4,0.02],
[2,5,0.01],
[3,4,0.06],
[3,5,0.05],
[4,5,0.07],
]
그런 다음 x_max X x_max 차원의 0으로 채워진 2D 배열 ( "행렬")이 있습니다. 이 행렬의 값을 다음과 같이 채우기 위해 계산적으로 효율적인 접근 방식을 사용하려고합니다.
// already have a variable called 'matrix' which is zero-filled
function constructMatrix(){
for(var i in arr){
var y = arr[i][0];
var x = arr[i][1];
var val = arr[i][2];
matrix[y][x] = val;
}
}
내가 얻는 것은 고유 한 열 값이 있지만 행에서 동일한 값을 갖는 행렬입니다. 어딘가에 내 논리에 간단한 휴식이 있습니까?
다음과 같은 출력을 기대합니다.
var matrix = [
[0.01,0.02,0.05,0.03],
[0,0.04,0.02,0.01],
[0,0,0.06,0.05],
[0,0,0,0.07],
]
다음과 같이 할 수 있습니다.
var arr = [
[1, 2, 0.01], [1, 3, 0.02], [1, 4, 0.05], [1, 5, 0.03],
[2, 3, 0.04], [2, 4, 0.02], [2, 5, 0.01], [3, 4, 0.06],
[3, 5, 0.05], [4, 5, 0.07]
];
// find total number of rows and columns
// add 1 because (x = 5) == (index 6) // indexes start at 0
var rows = arr.reduce((x,y) => Math.max(x, y[0]), 0) + 1;
var columns = arr.reduce((x,y) => Math.max(x, y[1]), 0) + 1;
// initiate an empty matrix
var matrix = [...Array(rows)].map(() => Array(columns).fill(0));
// loop over the points
arr.forEach(function(point) {
var x = point[0];
var y = point[1];
var val = point[2];
matrix[x][y] = val;
});
// your result
console.log( JSON.stringify(matrix, 0, 2) );
.as-console-wrapper {
max-height: 100%!important;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다