9

有没有人有一个函数,我可以用它在 Java 中转置一个具有以下形式的矩阵:

double[][]

我有这样的功能:

public static double[][] transposeMatrix(double [][] m){
    for (int i = 0; i < m.length; i++) {
        for (int j = i+1; j < m[0].length; j++) {
            double temp = m[i][j];
            m[i][j] = m[j][i];
            m[j][i] = temp;
        }
    }

    return m;
}

但它在某个地方是错误的。

4

7 回答 7

29
    public static double[][] transposeMatrix(double [][] m){
        double[][] temp = new double[m[0].length][m.length];
        for (int i = 0; i < m.length; i++)
            for (int j = 0; j < m[0].length; j++)
                temp[j][i] = m[i][j];
        return temp;
    }
于 2013-03-19T10:46:19.227 回答
4

如果您想使用外部库,Apache Commons Math 提供了转置矩阵的实用程序。请参考它的官方网站

首先,您必须创建一个双数组double[][] arr,就像您已经完成的那样。然后,转置的二维矩阵可以这样实现

MatrixUtils.createRealMatrix(arr).transpose().getData()
于 2017-08-19T02:36:43.447 回答
1

转置矩阵的 Java 类:-

import java.util.Scanner;

public class Transpose {

    /**
     * @param args
     */

    static int col;
    static int row;
    static int[][] trans_arr = new int[col][row];

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        col = m;
        int n = sc.nextInt();
        row = n;

        int[][] arr = new int[row][col];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                arr[i][j] = sc.nextInt();
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        int[][] trans_arr = new int[col][row];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                trans_arr[j][i] = arr[i][j];
            }
        }
        for (int i = 0; i < col; i++) {
            for (int j = 0; j < row; j++) {
                System.out.print(trans_arr[i][j] + " ");

            }
            System.out.println();
        }

    }

}
于 2015-04-20T09:07:29.940 回答
1

这是方法

public static double[][] transpose(double arr[][]){
    int m = arr.length;
    int n = arr[0].length;
    double ret[][] = new double[n][m];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            ret[j][i] = arr[i][j];
        }
    }

    return ret;
}
于 2018-03-25T16:06:09.710 回答
1

从 Java 8 开始,您可以这样做:

public static double[][] transposeMatrix(final double[][] matrix) {

    return IntStream.range(0, matrix[0].length)
        .mapToObj(i -> Stream.of(matrix).mapToDouble(row -> row[i]).toArray())
        .toArray(double[][]::new);
}
于 2020-05-18T09:25:09.237 回答
0

这是转置二维矩阵“就地”的代码(不使用其他数据结构来保存输出),因此内存效率更高:

以下相同的算法也可用于 int 或 char 或 string 数据类型。

  public static double[][] transposeDoubleMatrix(double[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                double tmp = matrix[j][i];
                matrix[j][i] = matrix[i][j];
                matrix[i][j] = tmp;
            }
        }
        return matrix;
    }
于 2021-06-17T23:16:34.450 回答
-1

这里有一个小改变!

for (int j = i; j < m[0].length; j++)
于 2018-09-07T20:42:02.013 回答