3030using MathNet . Numerics . LinearAlgebra ;
3131using NUnit . Framework ;
3232using System ;
33+ using System . Collections . Generic ;
3334using System . Linq ;
3435
3536namespace MathNet . Numerics . UnitTests . LinearAlgebraTests
@@ -615,9 +616,10 @@ public void CanCreateSparseFromCoordinateFormat()
615616 Assert . That ( A . RowCount , Is . EqualTo ( 3 ) ) ;
616617 Assert . That ( A . ColumnCount , Is . EqualTo ( 4 ) ) ;
617618
618- cooRowIndices . Reverse ( ) ;
619- cooColumnIndices . Reverse ( ) ;
620- cooValues . Reverse ( ) ;
619+ Array . Reverse ( cooRowIndices ) ;
620+ Array . Reverse ( cooColumnIndices ) ;
621+ Array . Reverse ( cooValues ) ;
622+
621623 var B = Matrix < T > . Build . SparseFromCoordinateFormat ( rowCount , columnCount , valueCount , cooRowIndices , cooColumnIndices , cooValues ) ;
622624
623625 for ( int j = 0 ; j < 4 ; j ++ )
@@ -634,133 +636,94 @@ public void CanCreateSparseFromCoordinateFormat()
634636 public void CanCreateSparseFromNonOrderedDuplicatedCoordinateFormat ( )
635637 {
636638 int rowCount = 2 , columnCount = 2 , valueCount = 5 ;
637- var cooRowIndices = new int [ 5 ] { 1 , 0 , 1 , 0 , 1 } ;
638- var cooColumnIndices = new int [ 5 ] { 1 , 0 , 0 , 1 , 1 } ;
639+ var cooRowIndices = new [ ] { 1 , 0 , 1 , 0 , 1 } ;
640+ var cooColumnIndices = new [ ] { 1 , 0 , 0 , 1 , 1 } ;
639641 var cooValues = Vector < T > . Build . Random ( 5 , 0 ) . ToArray ( ) ;
640642
641643 var A = Matrix < T > . Build . SparseFromCoordinateFormat ( rowCount , columnCount , valueCount , cooRowIndices , cooColumnIndices , cooValues ) ;
642644
643- cooRowIndices . Reverse ( ) ;
644- cooColumnIndices . Reverse ( ) ;
645- cooValues . Reverse ( ) ;
645+ Array . Reverse ( cooRowIndices ) ;
646+ Array . Reverse ( cooColumnIndices ) ;
647+ Array . Reverse ( cooValues ) ;
646648
647649 var B = Matrix < T > . Build . SparseFromCoordinateFormat ( rowCount , columnCount , valueCount , cooRowIndices , cooColumnIndices , cooValues ) ;
648650
649- for ( int j = 0 ; j < columnCount ; j ++ )
650- {
651- for ( int i = 0 ; i < rowCount ; i ++ )
652- {
653- Assert . That ( A [ i , j ] , Is . EqualTo ( B [ i , j ] ) ) ;
654- }
655- }
651+ Assert . That ( A . Equals ( B ) ) ;
656652 }
657653
658654 [ Test ]
659655 public void CanCreateSparseFromCompressedSparseRowFormat ( )
660656 {
661- var rows = new [ ]
662- {
663- Vector < T > . Build . Random ( 4 , 0 ) ,
664- Vector < T > . Build . Random ( 4 , 1 ) ,
665- Vector < T > . Build . Random ( 4 , 3 )
666- } ;
657+ var dense = Matrix < T > . Build . Random ( 4 , 3 , seed : 0 ) ;
658+ dense . At ( 0 , 2 , Matrix < T > . Zero ) ;
659+ dense . At ( 2 , 1 , Matrix < T > . Zero ) ;
667660
668- var rowCount = rows . Length ;
669- var columnCount = 4 ;
670- var valueCount = rowCount * columnCount ;
661+ var rowCount = dense . RowCount ;
662+ var columnCount = dense . ColumnCount ;
671663
672664 var csrRowPointers = new int [ rowCount + 1 ] ;
673- var csrColumnIndices = new int [ valueCount ] ;
674- var csrValues = new T [ valueCount ] ;
665+ var csrColumnIndicesList = new List < int > ( rowCount * columnCount ) ;
666+ var csrValuesList = new List < T > ( rowCount * columnCount ) ;
675667
676- int loc = 0 ;
677668 for ( int i = 0 ; i < rowCount ; i ++ )
678669 {
679670 for ( int j = 0 ; j < columnCount ; j ++ )
680671 {
681672 csrRowPointers [ i + 1 ] ++ ;
682- csrColumnIndices [ loc ] = j ;
683- csrValues [ loc ] = rows [ i ] . At ( j ) ;
684- loc ++ ;
673+ csrColumnIndicesList . Add ( j ) ;
674+ csrValuesList . Add ( dense . At ( i , j ) ) ;
685675 }
686676 }
687677 for ( int i = 1 ; i < rowCount + 1 ; i ++ )
688678 {
689679 csrRowPointers [ i ] += csrRowPointers [ i - 1 ] ;
690680 }
691681
692- var A = Matrix < T > . Build . SparseFromCompressedSparseRowFormat ( rowCount , columnCount , valueCount , csrRowPointers , csrColumnIndices , csrValues ) ;
693- Assert . That ( A . GetType ( ) . Name , Is . EqualTo ( "SparseMatrix" ) ) ;
694- Assert . That ( A . RowCount , Is . EqualTo ( 3 ) ) ;
695- Assert . That ( A . ColumnCount , Is . EqualTo ( 4 ) ) ;
696-
697- csrRowPointers . Reverse ( ) ;
698- csrColumnIndices . Reverse ( ) ;
699- csrValues . Reverse ( ) ;
700- var B = Matrix < T > . Build . SparseFromCompressedSparseRowFormat ( rowCount , columnCount , valueCount , csrRowPointers , csrColumnIndices , csrValues ) ;
682+ var csrColumnIndices = csrColumnIndicesList . ToArray ( ) ;
683+ var csrValues = csrValuesList . ToArray ( ) ;
701684
702- for ( int j = 0 ; j < 4 ; j ++ )
703- {
704- for ( int i = 0 ; i < 3 ; i ++ )
705- {
706- Assert . That ( A [ i , j ] , Is . EqualTo ( rows [ i ] [ j ] ) ) ;
707- Assert . That ( B [ i , j ] , Is . EqualTo ( rows [ i ] [ j ] ) ) ;
708- }
709- }
685+ var A = Matrix < T > . Build . SparseFromCompressedSparseRowFormat ( rowCount , columnCount , csrValues . Length , csrRowPointers , csrColumnIndices , csrValues ) ;
686+ Assert . That ( A . GetType ( ) . Name , Is . EqualTo ( "SparseMatrix" ) ) ;
687+ Assert . That ( A . Equals ( dense ) , "A = dense" ) ;
710688 }
711689
712690 [ Test ]
713691 public void CanCreateSparseFromCompressedSparseColumnFormat ( )
714692 {
715- var rows = new [ ]
716- {
717- Vector < T > . Build . Random ( 4 , 0 ) ,
718- Vector < T > . Build . Random ( 4 , 1 ) ,
719- Vector < T > . Build . Random ( 4 , 3 )
720- } ;
693+ var dense = Matrix < T > . Build . Random ( 4 , 3 , seed : 0 ) ;
694+ dense . At ( 0 , 2 , Matrix < T > . Zero ) ;
695+ dense . At ( 2 , 1 , Matrix < T > . Zero ) ;
721696
722- var rowCount = rows . Length ;
723- var columnCount = 4 ;
724- var valueCount = rowCount * columnCount ;
697+ var rowCount = dense . RowCount ;
698+ var columnCount = dense . ColumnCount ;
725699
726- var cscRowIndices = new int [ valueCount ] ;
727700 var cscColumnPointers = new int [ columnCount + 1 ] ;
728- var cscValues = new T [ valueCount ] ;
701+ var cscRowIndicesList = new List < int > ( rowCount * columnCount ) ;
702+ var cscValuesList = new List < T > ( rowCount * columnCount ) ;
729703
730- int loc = 0 ;
731704 for ( int j = 0 ; j < columnCount ; j ++ )
732705 {
733706 for ( int i = 0 ; i < rowCount ; i ++ )
734707 {
735- cscColumnPointers [ j + 1 ] ++ ;
736- cscRowIndices [ loc ] = i ;
737- cscValues [ loc ] = rows [ i ] . At ( j ) ;
738- loc ++ ;
708+ if ( ! Matrix < T > . Zero . Equals ( dense . At ( i , j ) ) )
709+ {
710+ cscColumnPointers [ j + 1 ] ++ ;
711+ cscRowIndicesList . Add ( i ) ;
712+ cscValuesList . Add ( dense . At ( i , j ) ) ;
713+ }
739714 }
740715 }
741716 for ( int i = 1 ; i < columnCount + 1 ; i ++ )
742717 {
743718 cscColumnPointers [ i ] += cscColumnPointers [ i - 1 ] ;
744719 }
745720
746- var A = Matrix < T > . Build . SparseFromCompressedSparseColumnFormat ( rowCount , columnCount , valueCount , cscRowIndices , cscColumnPointers , cscValues ) ;
747- Assert . That ( A . GetType ( ) . Name , Is . EqualTo ( "SparseMatrix" ) ) ;
748- Assert . That ( A . RowCount , Is . EqualTo ( 3 ) ) ;
749- Assert . That ( A . ColumnCount , Is . EqualTo ( 4 ) ) ;
750-
751- cscRowIndices . Reverse ( ) ;
752- cscColumnPointers . Reverse ( ) ;
753- cscValues . Reverse ( ) ;
754- var B = Matrix < T > . Build . SparseFromCompressedSparseColumnFormat ( rowCount , columnCount , valueCount , cscRowIndices , cscColumnPointers , cscValues ) ;
721+ var cscRowIndices = cscRowIndicesList . ToArray ( ) ;
722+ var cscValues = cscValuesList . ToArray ( ) ;
755723
756- for ( int j = 0 ; j < 4 ; j ++ )
757- {
758- for ( int i = 0 ; i < 3 ; i ++ )
759- {
760- Assert . That ( A [ i , j ] , Is . EqualTo ( rows [ i ] [ j ] ) ) ;
761- Assert . That ( B [ i , j ] , Is . EqualTo ( rows [ i ] [ j ] ) ) ;
762- }
763- }
724+ var A = Matrix < T > . Build . SparseFromCompressedSparseColumnFormat ( rowCount , columnCount , cscValues . Length , cscRowIndices , cscColumnPointers , cscValues ) ;
725+ Assert . That ( A . GetType ( ) . Name , Is . EqualTo ( "SparseMatrix" ) ) ;
726+ Assert . That ( A . Equals ( dense ) , "A = dense" ) ;
764727 }
765728
766729 [ Test ]
0 commit comments