矩阵运算(转置)



我想执行矩阵运算(例如,查找给定矩阵 A 的转置矩阵)

我找到了一些库来做到这一点,例如 Colt:

http://acs.lbl.gov/software/colt/api/index.html

http://acs.lbl.gov/software/colt/api/cern/colt/matrix/package-summary.html

在第二个链接中提到,如果要打印转置,请键入:

System.out.println(matrix.viewDice());

但是,我不想打印转置矩阵。我想将其存储在具有适当尺寸的第二个矩阵中,例如 B。

有什么想法吗?

你看过图书馆Apache Commons Math吗? 例如:

public static void main(String[] args) {
    double[][] data = { { 1, 2, 3 }, { 4, 5, 6 } };
    RealMatrix matrix = MatrixUtils.createRealMatrix(data);
    RealMatrix transpose = matrix.transpose();
}

这是在la4j(Java的线性代数)中转置矩阵的另一个例子:

// create simple 2D array matrix of double[][] array
Matrix a = new Basic2DMatrix(new double[] {
  { 1.0, 2.0, 3.0 },
  { 4.0, 5.0, 6.0 },
  { 7.0, 8.0, 9.0 }
});
// transpose out-of-place
Matrix b = a.transpose();
// output matrices  
System.out.println(a);
System.out.println(b);

使用柯尔特库,您可以简单地做

DoubleMatrix2D transposed = matrix.viewDice();

viewDice() 方法返回一个 DoubleMatrix2D。

只是为了添加我的 2 美分,因为我正在考虑自己实现矩阵转置。

我们可以在原始 java 2D 数组中添加一个包装器吗?

当你转置

矩阵时,你根本不会转置实际的数组,而只是在包装器中将其标记为transpose=true。

当您想通过包装器访问 (3,2) 处的值时,包装器会交换行索引和列索引并返回 (2,3) 处的值

您可以对其他操作执行相同的操作,直到"真正"需要实际转置。

我所说的"真的"是指实际的转置矩阵比使用原始矩阵具有计算性能优势,这主要取决于您将在矩阵上执行的操作。

在我的一个家庭作业中,作为我学位的一部分,我们被要求将矩阵带到一个函数,并创建一个带有矩阵转置的新文件 txt。我在下面附上我的解决方案。我希望它能帮助某人:)

public static void transposedMatrixToFile(int[][] mat, String fileName) throws IOException {
        int[][] transposedMatrix = new int[mat[0].length][mat.length];
        for(int row = 0; row < mat.length; row++) {
            for(int col = 0; col < mat[0].length; col++) {
                transposedMatrix[col][row] = mat[row][col];
            }
        }
        
        String fileNameString = fileName + ".txt";
        File file = new File(fileNameString);
        file.createNewFile();
        FileWriter myWriter = new FileWriter(fileNameString);
        for(int i = 0; i < transposedMatrix.length; i++) {
            for(int j = 0; j < transposedMatrix[0].length; j++) {
                myWriter.write("" + transposedMatrix[i][j] + " ");
            }
            myWriter.write("n");
        }
        myWriter.close();
    }

相关内容

  • 没有找到相关文章

最新更新