java 矩阵运算(转置)

ctzwtxfj  于 2023-01-15  发布在  Java
关注(0)|答案(5)|浏览(150)

我想执行矩阵运算(例如,求给定矩阵A的转置矩阵)
我发现一些图书馆这样做,例如柯尔特:
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,它将具有适当的维数。
有什么想法吗?

gzszwxb4

gzszwxb41#

您看过库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();
}
hsgswve4

hsgswve42#

下面是在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);
92dk7w1h

92dk7w1h3#

使用Colt Library,您可以简单地

DoubleMatrix2D transposed = matrix.viewDice();

viewDice()方法返回一个DoubleMatrix2D。

r8xiu3jd

r8xiu3jd4#

加上我的2分钱,因为我正在考虑自己实现矩阵转置。
我们可以给原始的java 2D数组添加一个 Package 器吗?
当转置矩阵时,根本不转置实际的数组,而是在 Package 器中简单地将其标记为transpose=true。
当您希望通过 Package 器访问(3,2)处的值时, Package 器交换行和列索引并返回(2,3)处的值
您可以对其他操作执行相同的操作,直到“真正”需要实际的转置。
我所说的“真正”是指实际转置矩阵比使用原始矩阵具有计算性能优势,这主要取决于您将对矩阵执行什么操作。

qkf9rpyu

qkf9rpyu5#

在我的一个作业中,作为我学位的一部分,我们被要求得到一个函数的矩阵,并创建一个新的文件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();
    }

相关问题