nssi-fmri-demo/random.js
2024-07-28 23:36:17 +08:00

48 lines
1.2 KiB
JavaScript

export function random(min, max) {
// Return a random number in the range [min, max)
return Math.random() * (max - min) + min;
}
export function randint(min, max, high = false) {
// Return a random integer in the range [min, max) or [min, max]
return Math.floor(Math.random() * (max - min + high)) + min;
}
export function randn(mu = 0, sigma = 1, n = 1) {
const list = [];
function generatePair() {
let u = 0, v = 0;
while (u === 0) u = Math.random();
while (v === 0) v = Math.random();
list.push(mu + sigma * Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v));
list.push(mu + sigma * Math.sqrt(-2.0 * Math.log(u)) * Math.sin(2.0 * Math.PI * v));
}
while (list.length < n) {
generatePair();
}
return n === 1 ? list[0] : list.slice(0, n);
}
export function choice(list) {
return list[randint(0, list.length)];
}
export function shuffle(list) {
list = list.slice();
for (let i = 0; i < list.length; i++) {
const j = randint(i, list.length);
[list[i], list[j]] = [list[j], list[i]];
}
return list;
}
export const Random = {
random,
randint,
randn,
choice,
shuffle
};
export default Random;