Home > OS >  How to convert lower triangular matrix into a vector?
How to convert lower triangular matrix into a vector?

Time:03-04

I want to convert my triangular matrix into a vector.

Let's say I have 7x7 lower triangular matrix. Something like this:

0  0  0  0  0  0  1

0  0  0  0  0  2  3

0  0  0  0  4  5  6

0  0  0  7  8  9 10

0  0  11 12 13 14 15

0  16 17 18 19 20 21

22 23 24 25 26 27 28

And I need to convert this matrix into a vector ignoring zeros. So, the result should be:

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 28]

I have already made a matrix by the following code:

int specMas[][] = new int[7][7];
        Random rand = new Random();
        int i, j;
        
        for(j = 6; j > -1; j--) {
            
            for(i = 6; i > 5-j; i--) {
            
            specMas[i][j] = rand.nextInt(-100, 101);
            
            
            }
        }
        
        for (i=0; i<7; i  ) {
            for (j=0; j<7; j  )
                System.out.print(specMas[i][j]);
            System.out.println();
        }

But I don't really get how to convert that into a vector. Can you please explain me how?

CodePudding user response:

Just filter out the 0 values as below

        int k = 0;
        Integer[] array = new Integer[specMas.length * specMas.length];

        for (i = 0; i < specMas.length; i  ) {
            for (j = 0; j < specMas[i].length; j  ) {
                array[k  ] = specMas[i][j];
            }
        }
        Integer[] result = Arrays.stream(array)
                .filter(o -> o != 0).collect(Collectors.toList()).toArray(Integer[]::new);

And the result array will be you desired answer, by the way the concept of transforming the rank 2 tensors to vector is quit useful, with this approach you can transfer the rank 4 tensors (supper-operators) to tensor rank 2 (matrix) then study their behaviour in the new vector space .

Validate final result as

        for (i = 0 ; i< result.length ; i  ){
            System.out.print(result[i]);
        }

example

  • Related