首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标准差javascript

标准差javascript
EN

Stack Overflow用户
提问于 2011-09-08 14:18:15
回答 9查看 39.5K关注 0票数 21

我正在尝试获取用户输入字符串的标准差。如下所示,但它返回了错误的SD值。计算方法如下:求和值/数值=均方(求和每个值-均值)求和平方/数值。

感谢帮助(如果可能,请解释):

代码语言:javascript
复制
function sum() {
  var val = document.getElementById('userInput').value;
  var temp = val.split(" ");
  var total = 0;
  var v;
  var mean = total / temp.length;
  var total1 = 0;
  var v1;
  var temp23;
  var square;

  for (var i = 0; i < temp.length; i++) {
    v = parseFloat(temp[i]);
    total += v;
  }

  mean = total / temp.length;

  for (var i = 0; i < temp.length; i++) {
    v1 = parseFloat(Math.pow(temp[i] - mean), 2);
    total1 += v1;
  }


  temp23 = total1 / temp.length;
  square = Math.sqrt(temp23);

  document.write(total + '<br />');
  document.write(mean + '<br />');
  document.write(square);
}
代码语言:javascript
复制
<html>

<head>
</head>

<body>
  <form id="input">
    <textarea id="userInput" rows=20 cols=20></textarea>
    <input id="Run" type=Button value="run" onClick="sum()" />
  </form>
</body>

</html>

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-09-08 14:31:06

我认为(主要)问题在下面这一行:

代码语言:javascript
复制
v1 = parseFloat(Math.pow(temp[i]-mean),2);

应该是:

代码语言:javascript
复制
v1 = Math.pow(parseFloat(temp[i])-mean),2);

您的代码尝试将temp[i]中的字符串用作数字并从中减去mean,然后将其平方,然后解析结果值。在计算中使用它之前,需要使用parseFloat。另外,在Math.pow调用的结束括号之外还有,2,所以平方也不起作用。

使用更有意义的变量名也是有帮助的,我的意思是,例如,你有一个名为"square“的变量,它保存平方根运算的结果。

附注:您需要添加一些错误检查,以防用户输入非数字数据。检查parseFloat()的结果是否不是NaN。我倾向于在数组中执行初始循环,解析和检查有效数字,将解析的数字存储在第二个数组中(或将它们写回第一个数组),如果有无效的,则在该点给用户一条错误消息并停止。然后,在实际计算中,您不必担心在执行过程中进行解析(或者,在您的情况下,在第二个循环中再次解析)。

票数 6
EN

Stack Overflow用户

发布于 2018-12-02 11:39:13

如果你不喜欢很多代码,从数组中获取标准差的简写方法:

代码语言:javascript
复制
function getStandardDeviation (array) {
  const n = array.length
  const mean = array.reduce((a, b) => a + b) / n
  return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n)
}
票数 40
EN

Stack Overflow用户

发布于 2015-08-25 18:19:10

对于任何寻求更通用解决方案的人,这里有一个添加到Array#中的标准差函数。该函数期望在数字数组上被调用。

代码语言:javascript
复制
Array.prototype.stanDeviate = function(){
   var i,j,total = 0, mean = 0, diffSqredArr = [];
   for(i=0;i<this.length;i+=1){
       total+=this[i];
   }
   mean = total/this.length;
   for(j=0;j<this.length;j+=1){
       diffSqredArr.push(Math.pow((this[j]-mean),2));
   }
   return (Math.sqrt(diffSqredArr.reduce(function(firstEl, nextEl){
            return firstEl + nextEl;
          })/this.length));
};
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7343890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档