Итак, на данный момент у меня есть некоторый код, который может взять данные из API WebSocket (в данном случае API транзакций с биткойнами) и «нормализовать» входящее значение, сохранив все предыдущие значения в массиве и затем найдя этовходящие значения помещаются в этот массив (после добавления).Затем он масштабирует это значение от -1 до 1, которое вы можете увидеть в функции normalize()
.
Это здорово, поскольку значения сильно различаются (от 0,0001 до 1000), однако я бы сейчас хотел вес это входящее значение (которое превращается в переменную normalVal
, чтобы оно не отклонялось слишком далеко от 0 (среднего), и здесь я застрял для идей Can. Может кто-нибудьпомочь? Это может быть больше прямой математической проблемы, но я подумал, что я попробую здесь на SO. Заранее спасибо!
var transactions = [];
function normalize( value, r1, r2 ) {
return ( value - r1[ 0 ] ) * ( r2[ 1 ] - r2[ 0 ] ) / ( r1[ 1 ] - r1[ 0 ] ) + r2[ 0 ];
}
eventToListenTo = 'tx'
room = 'inv'
var socket = io("https://blockexplorer.com/");
socket.on('connect', function() {
// Join the room.
socket.emit('subscribe', room);
});
socket.on(eventToListenTo, function(data) {
let value = data.valueOut;
$('#value').text(value);
transactions.push(value);
transactions.sort((a, b) => a - b);
let min = transactions[0];
let max = transactions.slice(-1)[0];
let normalVal = normalize(value, [min, max], [-1, 1]);
$('#min').text(min);
$('#max').text(max);
$('#normal').text(normalVal);
$('#counter').text(transactions.length);
});
div {
font-family: helvetica;
}
span {
color: red;
}
span#normal {
color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://blockexplorer.com/socket.io/socket.io.js"></script>
<add name='Access-Control-Allow-Origin' value="*" />
<body>
<div>Incoming: <span id="value">Connecting</span></div>
<div>Min: <span id="min"></span></div>
<div>Max: <span id="max"></span></div>
<div>Normalize: <span id="normal"></span></div>
<br>
<div>Counter: <span id="counter"></span></div>
</body>