【问题标题】:creating distance matrix from 2D array从二维数组创建距离矩阵
【发布时间】:2014-07-28 12:10:32
【问题描述】:

我有一个 2D 数组(具有 x 行和 y 列的 inputMatrix),需要将所有向量(行)相减。

Here's the input:

1,5
3,7
2,3
6,5
4,7

输出(距离矩阵)应如下所示:

subtraction[0][0] = {0,0} // first row - first row
subtraction[0][1] = {-2,-2} // first row - 2nd row -> {1,5}-{3,7}=-2,2
subtraction[0][2] = {-1,2} // first row - 3rd row 
...
subtraction[4][2] = {2,4}
subtraction[4][3] = {-2,2}
subtraction[4][4] = {0,0}

但是我在存储值时遇到了问题,因为减法 [row][col] 值正在“col for-loop”上被覆盖。另请注意,每个减法索引都将作为输出另一个数组。

for(int row = 0; row < inputMatrix.length; row++){
            for(int col = 0; col < inputMatrix[0].length; col++){
                subtraction[row][col] = inputMatrix[0][row] - inputMatrix[row][col];
                System.out.print(subtraction[row][col] + " ");
            }
        System.out.print("\n");
    }

【问题讨论】:

  • 如何将结果存储在第二个数组中而不是减法本身?
  • 减法是一个空的二维数组,所以我的想法是将所有值存储在那里。

标签: java arrays matrix distance subtraction


【解决方案1】:

根据您对输出的描述,您需要一个 3 维数组来存储输出,因为对于每对输入行,您正在生成一个输出行。

for(int row1 = 0; row1 < inputMatrix.length; row1++){
   for(int row2 = 0; row2 < inputMatrix.length; row2++){
        for(int col = 0; col < inputMatrix[0].length; col++){
            subtraction[row1][row2][col] = inputMatrix[row1][col] - inputMatrix[row2][col];
        }
    }
}

如果一定要二维输出,可以将输出展平:

int outputRow = 0;
for(int row1 = 0; row1 < inputMatrix.length; row1++){
   for(int row2 = 0; row2 < inputMatrix.length; row2++){
        for(int col = 0; col < inputMatrix[0].length; col++){
            subtraction[outputRow][col] = inputMatrix[row1][col] - inputMatrix[row2][col];
        }
        outputRow++;
    }
}

【讨论】:

  • 此解决方案有效。但是我必须使用 JAMA( LinearAlgebra.times(subtraction,anotherMatrix); ) 将减法输出与另一个矩阵相乘,并且它不允许 3d 输入
  • @user3086819 您可以将输出展平为二维数组。但是,我不知道您要计算什么,所以我不知道它是否有意义。查看我的编辑。
  • 好主意,但是对于 2d 扁平输出,我总是得到每个索引的结果“0.0”
  • @user3086819 我的错。我把int outputRow = 0; 放错地方了。
【解决方案2】:

subtraction[row][col] = inputMatrix[0][row] - inputMatrix[**row**][**col**];

你在这里混淆了你的索引。

【讨论】: