Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is the MATLAB function of 'reshape' available in any Java library?

I am trying to use the functionality of the reshape function available in MATLAB in Java. Are there any implementations of reshape available in Java?

like image 821
Jeeka Avatar asked May 20 '10 19:05

Jeeka


2 Answers

I found this (modified a little) on the sun forums.

public class Test {

    public static void main(String[] args) {
        double[][] ori = new double[][] { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} };
        double[][] res = reshape(ori,2,6);

        for(int i = 0;i<ori.length;i++){
            for(int j = 0;j<ori[0].length;j++){
                System.out.print(ori[i][j]+" ");
            }
            System.out.println("");
        }
        System.out.println("");
        for(int i = 0;i<res.length;i++){
            for(int j = 0;j<res[0].length;j++){
                System.out.print(res[i][j]+" ");
            }
            System.out.println("");
        }



    }

    public static double[][] reshape(double[][] A, int m, int n) {
        int origM = A.length;
        int origN = A[0].length;
        if(origM*origN != m*n){
            throw new IllegalArgumentException("New matrix must be of same area as matix A");
        }
        double[][] B = new double[m][n];
        double[] A1D = new double[A.length * A[0].length];

        int index = 0;
        for(int i = 0;i<A.length;i++){
            for(int j = 0;j<A[0].length;j++){
                A1D[index++] = A[i][j];
            }
        }

        index = 0;
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                B[j][i] = A1D[index++];
            }

        }
        return B;
    }
}

test output is

1.0 2.0 3.0 
4.0 5.0 6.0 
7.0 8.0 9.0 
10.0 11.0 12.0 

1.0 3.0 5.0 7.0 9.0 11.0 
2.0 4.0 6.0 8.0 10.0 12.0 
like image 114
corsiKa Avatar answered Oct 12 '22 23:10

corsiKa


A bit late, but for any future visitors. There is the Eclipse January, which supports such operation

This is a library for handling Data in Java. It is inspired in part by NumPy and aims to provide similar functionality.

It does have support for reshape function on Dataset. You can go over the BasicExample

(code from the above example)

Dataset another = DatasetFactory
                    .createFromObject(new double[] { 1, 1, 2, 3, 5, 8, 13, 21, 34 })
                    .reshape(3, 3);
like image 28
vava044 Avatar answered Oct 13 '22 00:10

vava044