我想用亂數設定一個矩陣。我首先使用了一個函式來創建一個 0 矩陣,然后遍歷每個單元格并為其分配一個亂數。
function getRandomArbitrary(min, max) {
let value = Math.random() * (max - min) min;
if (value === 0)
return getRandomArbitrary(min, max);
return value;
}
function matrix(m, n, d) {
return Array.apply(null, new Array(m)).map(
Array.prototype.valueOf,
Array.apply(null, new Array(n)).map(
function() {
return d;
}
)
);
}
let weight_1 = matrix(4, 3, 0);
for (let i = 0; i < 4; i ) {
for (let j = 0; j < 3; j ) {
weight_1[i][j] = getRandomArbitrary(-1, 1);
}
}
console.table(weight_1)
當我運行代碼時,我得到以下輸出。
從圖中可以看出,隨機值只有在變化時才會i變化。這與 JS 是異步的還是因為生成的亂數Math.random與時間戳有關?
uj5u.com熱心網友回復:
Array.prototype.valueOfis Object.prototype.valueOf,并且簡單地回傳接收者值(this引數)。它不會創建陣列的副本 - 因此您正在mapping 到一個外部陣列,該陣列在每個索引處都包含相同的內部陣列。相反,使用
function matrix(m, n, d) {
return Array.apply(null, new Array(m)).map(
function() {
return Array.apply(null, new Array(n)).map(
function() {
return d;
}
);
}
);
}
或更簡單且更傳統的格式
function matrix(m, n, d) {
return Array.from({length: m}, () =>
Array.from({length: n}, () =>
d
)
);
}
此外,您可能想要創建d 一個回呼函式并呼叫它,以便您直接創建矩陣,matrix(4, 3, () => getRandomArbitrary(-1, 1))而不是使用初始化它0然后回圈它來更改值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462994.html
標籤:javascript
上一篇:將路徑和哈希拆分為2個不同的變數
