Utils.js 830 B

12345678910111213141516171819202122232425262728293031323334353637
  1. function Utils() {
  2. }
  3. KMEANS.prototype.getRandomVector = function(extremes) {
  4. var maxDim = extremes.length;
  5. var x = [];
  6. var r = 0;
  7. // calculate radius of n-sphere which covers all points in dataset
  8. var nSphereRadius = 0;
  9. for (var i = 0; i < maxDim; i++) {
  10. var extreme = extremes[i];
  11. var er = Math.max(extreme.center - extreme.min, extreme.center - extreme.max);
  12. if (er > nSphereRadius)
  13. nSphereRadius = er;
  14. }
  15. for (var i = 0; i < maxDim; i++) {
  16. var val = (Math.random() * 2) - 1;
  17. // adjust to radius of n-sphere
  18. x.push(val);
  19. r += val * val;
  20. }
  21. r = Math.sqrt(r);
  22. for (var i = 0; i < maxDim; i++) {
  23. x[i] /= r;
  24. // resize to fit n-sphere
  25. x[i] *= nSphereRadius;
  26. x[i] += extremes[i].center;
  27. }
  28. return x;
  29. }