Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java函数转置双[][]矩阵?_Java_Matrix - Fatal编程技术网

用java函数转置双[][]矩阵?

用java函数转置双[][]矩阵?,java,matrix,Java,Matrix,有没有人有一个函数,我可以用它在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];

有没有人有一个函数,我可以用它在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;
}
publicstaticdouble[]transpossematrix(double[]m){
对于(int i=0;i
但在某些地方它是错误的。

公共静态双[][]转置矩阵(双[]]m){
    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;
    }
双精度[][]温度=新双精度[m[0]。长度][m.length]; 对于(int i=0;i
转置矩阵的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();
        }

    }

}
import java.util.Scanner;
公共类转置{
/**
*@param args
*/
静态整数列;
静态int行;
静态int[]trans_arr=新int[col][row];
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪sc=新的扫描仪(System.in);
int m=sc.nextInt();
col=m;
int n=sc.nextInt();
行=n;
int[]arr=新的int[行][col];
对于(int i=0;i
如果您想使用外部库,Apache Commons Math提供了转置矩阵的实用程序。请参考它

首先,您必须创建一个双数组
double[]arr
,正如您已经做的那样。然后,可以像这样实现转置的2d矩阵

MatrixUtils.createRealMatrix(arr).transpose().getData()
这里是方法

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;
}
publicstaticdouble[][]转置(double-arr[]]{
int m=阵列长度;
int n=arr[0]。长度;
双重ret[][]=新的双重[n][m];
for(int i=0;i
这是一个小小的变化

for (int j = i; j < m[0].length; j++)
for(int j=i;j
自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);
}

尝试然后询问(int j=i+1;…
=>
for(int j=0;…)
-您也不需要返回m,调用方已经有了对它的引用。@Pshemo这一个关闭得有点太快了,似乎…@assylias是的,它是在OP发布他的尝试之前关闭的。之后我投票重新打开它。@gurehbgui您想做什么?如果您试图更改“square”中元素的位置如果你想把非方矩阵{1,2,3},{4,5,6}转换成{1,4},{2,5},{3,6},你必须创建并返回一个新的数组,因为你不能在已经存在的数组中添加/删除行。你不应该检查
m[0]
不会导致
IndexOutOfBoundsException
?您好,我看到您是网站的新贡献者,请您解释一下,这不仅仅是一行代码。谢谢!