Return NaN for d3.stats.mean([]).

Also added some unit tests for d3.stats.mean.
This commit is contained in:
Jason Davies 2011-06-06 23:51:05 +01:00
Родитель 56cc7d3e57
Коммит bb21bbd8ce
4 изменённых файлов: 6 добавлений и 3 удалений

Просмотреть файл

@ -200,6 +200,7 @@ tests: \
tests/test-bisect.test \
tests/test-stats-bandwidth.test \
tests/test-stats-iqr.test \
tests/test-stats-mean.test \
tests/test-stats-median.test \
tests/test-stats-variance.test \
tests/test-svg-arc.test \

Просмотреть файл

@ -100,8 +100,9 @@ d3.stats.iqr = function(x) {
};
// Welford's algorithm.
d3.stats.mean = function(x) {
var n = x.length;
if (n === 0) return NaN;
var m = 0,
n = x.length,
i = -1;
while (++i < n) m += (x[i] - m) / (i + 1);
return m;

2
d3.stats.min.js поставляемый
Просмотреть файл

@ -1 +1 @@
(function(){d3.stats={},d3.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(d3.stats.variance(a));(lo=Math.min(b,d3.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=d3.stats.iqr(a)/1.34;return 1.06*Math.min(Math.sqrt(d3.stats.variance(a)),b)*Math.pow(a.length,-0.2)}},d3.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},d3.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=d3.stats.kernel.gaussian,b=[],c=d3.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=d3.functor(a);return d};return d},d3.stats.iqr=function(a){var b=d3.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},d3.stats.mean=function(a){var b=0,c=a.length,d=-1;while(++d<c)b+=(a[d]-b)/(d+1);return b},d3.stats.median=function(a){return d3.stats.quantiles(a,[.5])[0]},d3.stats.mode=function(a){a=a.slice().sort(d3.ascending);var b,c=a.length,d=-1,e=d,f=null,g=0,h,i;while(++d<c)(i=a[d])!==f&&((h=d-e)>g&&(g=h,b=f),f=i,e=d);return b},d3.stats.quantiles=function(a,b){a=a.slice().sort(d3.ascending);var c=a.length-1;return b.map(function(b){if(b===0)return a[0];if(b===1)return a[c];var e=1+b*c,f=Math.floor(e),g=e-f,h=a[f-1];return g===0?h:h+g*(a[f]-h)})},d3.stats.variance=function(a){var b=a.length;if(b<1)return NaN;if(b===1)return 0;var c=d3.stats.mean(a),d=-1,e=0;while(++d<b){var f=a[d]-c;e+=f*f}return e/(b-1)}})()
(function(){d3.stats={},d3.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(d3.stats.variance(a));(lo=Math.min(b,d3.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=d3.stats.iqr(a)/1.34;return 1.06*Math.min(Math.sqrt(d3.stats.variance(a)),b)*Math.pow(a.length,-0.2)}},d3.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},d3.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=d3.stats.kernel.gaussian,b=[],c=d3.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=d3.functor(a);return d};return d},d3.stats.iqr=function(a){var b=d3.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},d3.stats.mean=function(a){var b=a.length;if(b===0)return NaN;var c=0,d=-1;while(++d<b)c+=(a[d]-c)/(d+1);return c},d3.stats.median=function(a){return d3.stats.quantiles(a,[.5])[0]},d3.stats.mode=function(a){a=a.slice().sort(d3.ascending);var b,c=a.length,d=-1,e=d,f=null,g=0,h,i;while(++d<c)(i=a[d])!==f&&((h=d-e)>g&&(g=h,b=f),f=i,e=d);return b},d3.stats.quantiles=function(a,b){a=a.slice().sort(d3.ascending);var c=a.length-1;return b.map(function(b){if(b===0)return a[0];if(b===1)return a[c];var e=1+b*c,f=Math.floor(e),g=e-f,h=a[f-1];return g===0?h:h+g*(a[f]-h)})},d3.stats.variance=function(a){var b=a.length;if(b<1)return NaN;if(b===1)return 0;var c=d3.stats.mean(a),d=-1,e=0;while(++d<b){var f=a[d]-c;e+=f*f}return e/(b-1)}})()

Просмотреть файл

@ -1,7 +1,8 @@
// Welford's algorithm.
d3.stats.mean = function(x) {
var n = x.length;
if (n === 0) return NaN;
var m = 0,
n = x.length,
i = -1;
while (++i < n) m += (x[i] - m) / (i + 1);
return m;