如何在javascript

时间:2018-01-12 09:24:39

标签: javascript arrays

这是我的代码



const arrayColumn = (arr, n) => arr.map(x => x[n]);
const pcorr = (x, y) => {
  let sumX = 0,
    sumY = 0,
    sumXY = 0,
    sumX2 = 0,
    sumY2 = 0;
  const minLength = x.length = y.length = Math.min(x.length, y.length),
    reduce = (xi, idx) => {
      const yi = y[idx];
      sumX += xi;
      sumY += yi;
      sumXY += xi * yi;
      sumX2 += xi * xi;
      sumY2 += yi * yi;
    }
  x.forEach(reduce);
  return (minLength * sumXY - sumX * sumY) / Math.sqrt((minLength * sumX2 - sumX * sumX) * (minLength * sumY2 - sumY * sumY));
};

//create pearson correlation matrix
        var r = [[]];
        var r_temp = [];
        for (var i = 1; i <= _arrData[0].length; i++) {
          for (var j = 1; j <= _arrData[0].length; j++) {
            r_temp.push(pcorr(arrayColumn(_arrData,i-1),arrayColumn(_arrData,j-1)));
          }
        }
        
        var r_temp_length = r_temp.length;
        for (var i = 1; i <= _arrData[0].length; i++) {
          for (var j = 1; j <= _arrData[0].length; j++) {
            r[i - 1][j - 1] = r_temp[_arrData[0].length^2 - r_temp_length];
            r_temp_length = r_temp_length - 1;
          }
        }
&#13;
&#13;
&#13;

_arrData是来自.csv文件的数据,已经读作矩阵43X4 r_temp结果是

[1, 0.1001546791334383, -0.09722360940329312, -0.1119017933192886, 0.1001546791334383, 1, 0.19766088533723247, -0.03844791092325515, -0.09722360940329312, 0.19766088533723247, 1, -0.06161560854254137, -0.1119017933192886, -0.03844791092325515, -0.06161560854254137, 1]

r_temp长度为16

我想将r_temp值输入r,这将是4x4 Matrix

当我运行此代码时,此部分出现错误

r[i - 1][j - 1] = r_temp[_arrData[0].length^2 - r_temp_length];

未捕获的TypeError:无法设置属性&#39; 0&#39;未定义的

2 个答案:

答案 0 :(得分:0)

var r = [];

...

for (var i = 1; i <= _arrData[0].length; i++) {
    r[i - 1] = [];

...

应该是var r = [];而不是[[]]。

在你的代码中,行r [i - 1] = [];不见了。

它为r [i - 1]创建第二个数组。

答案 1 :(得分:0)

谢谢大家,它有效!

//create pearson correlation matrix
        var r = [];
        for (var i = 1; i <= _arrData[0].length; i++) {
          r[i - 1] = [];
        }
        var r_temp = [];
        for (var i = 1; i <= _arrData[0].length; i++) {
          for (var j = 1; j <= _arrData[0].length; j++) {
            r_temp.push(pcorr(arrayColumn(_arrData,i-1),arrayColumn(_arrData,j-1)));
          }
        }
        var r_temp_length = r_temp.length;
        for (var i = 1; i <= _arrData[0].length; i++) {
          for (var j = 1; j <= _arrData[0].length; j++) {
            r[i - 1][j - 1] = r_temp[Math.pow(_arrData[0].length,2) - r_temp_length];
            r_temp_length = r_temp_length - 1;
          }
        }