public Matrix(final double[][] data,final Set<Address.Flags> flags){
  super(data.length,data[0].length,null);
  this.addr=new DirectMatrixAddress(this.$,0,data.length,null,0,data[0].length,flags,true,data.length,data[0].length);
  for (int row=0; row < data.length; row++) {
    System.arraycopy(data[row],0,this.$,row * this.cols,this.cols);
  }
}

public Matrix ( final double [ ] [ ] data , final Set < Address . Flags > flags ) { super ( data . length , data [ 0 ] . length , null ) ; this . addr = new DirectMatrixAddress ( this . $ , 0 , data . length , null , 0 , data [ 0 ] . length , flags , true , data . length , data [ 0 ] . length ) ; for ( int row = 0 ; row < data . length ; row ++ ) { System . arraycopy ( data [ row ] , 0 , this . $ , row * this . cols , this . cols ) ; } }
creates a matrix given a double [ ] [ ] array
