@@ -680,12 +680,15 @@ public override double InfinityNorm()
680680 /// <returns>The square root of the sum of the squared values.</returns>
681681 public override double FrobeniusNorm ( )
682682 {
683- var aat = ( SparseCompressedRowMatrixStorage < Complex > ) ( this * ConjugateTranspose ( ) ) . Storage ;
684683 var norm = 0d ;
684+
685+ var aat = ( SparseCompressedRowMatrixStorage < Complex > ) ( this * ConjugateTranspose ( ) ) . Storage ;
686+ var aatRowPointers = aat . RowPointers ;
687+ var aatValues = aat . Values ;
685688 for ( var i = 0 ; i < aat . RowCount ; i ++ )
686689 {
687- var startIndex = aat . RowPointers [ i ] ;
688- var endIndex = aat . RowPointers [ i + 1 ] ;
690+ var startIndex = aatRowPointers [ i ] ;
691+ var endIndex = aatRowPointers [ i + 1 ] ;
689692
690693 if ( startIndex == endIndex )
691694 {
@@ -696,7 +699,7 @@ public override double FrobeniusNorm()
696699 {
697700 if ( i == aat . ColumnIndices [ j ] )
698701 {
699- norm += aat . Values [ j ] . Magnitude ;
702+ norm += aatValues [ j ] . Magnitude ;
700703 }
701704 }
702705 }
@@ -742,13 +745,17 @@ protected override void DoAdd(Matrix<Complex> other, Matrix<Complex> result)
742745 }
743746
744747 var leftStorage = left . _storage ;
748+ var leftStorageRowPointers = leftStorage . RowPointers ;
749+ var leftStorageColumnIndices = leftStorage . ColumnIndices ;
750+ var leftStorageValues = leftStorage . Values ;
751+
745752 for ( var i = 0 ; i < leftStorage . RowCount ; i ++ )
746753 {
747- var endIndex = leftStorage . RowPointers [ i + 1 ] ;
748- for ( var j = leftStorage . RowPointers [ i ] ; j < endIndex ; j ++ )
754+ var endIndex = leftStorageRowPointers [ i + 1 ] ;
755+ for ( var j = leftStorageRowPointers [ i ] ; j < endIndex ; j ++ )
749756 {
750- var columnIndex = leftStorage . ColumnIndices [ j ] ;
751- var resVal = leftStorage . Values [ j ] + result . At ( i , columnIndex ) ;
757+ var columnIndex = leftStorageColumnIndices [ j ] ;
758+ var resVal = leftStorageValues [ j ] + result . At ( i , columnIndex ) ;
752759 result . At ( i , columnIndex , resVal ) ;
753760 }
754761 }
@@ -781,16 +788,19 @@ protected override void DoSubtract(Matrix<Complex> other, Matrix<Complex> result
781788 }
782789
783790 var otherStorage = sparseOther . _storage ;
791+ var otherStorageRowPointers = otherStorage . RowPointers ;
792+ var otherStorageColumnIndices = otherStorage . ColumnIndices ;
793+ var otherStorageValues = otherStorage . Values ;
784794
785795 if ( ReferenceEquals ( this , sparseResult ) )
786796 {
787797 for ( var i = 0 ; i < otherStorage . RowCount ; i ++ )
788798 {
789- var endIndex = otherStorage . RowPointers [ i + 1 ] ;
790- for ( var j = otherStorage . RowPointers [ i ] ; j < endIndex ; j ++ )
799+ var endIndex = otherStorageRowPointers [ i + 1 ] ;
800+ for ( var j = otherStorageRowPointers [ i ] ; j < endIndex ; j ++ )
791801 {
792- var columnIndex = otherStorage . ColumnIndices [ j ] ;
793- var resVal = sparseResult . At ( i , columnIndex ) - otherStorage . Values [ j ] ;
802+ var columnIndex = otherStorageColumnIndices [ j ] ;
803+ var resVal = sparseResult . At ( i , columnIndex ) - otherStorageValues [ j ] ;
794804 result . At ( i , columnIndex , resVal ) ;
795805 }
796806 }
@@ -913,6 +923,8 @@ protected override void DoMultiply(Matrix<Complex> other, Matrix<Complex> result
913923 var values = _storage . Values ;
914924 if ( other . Storage is DenseColumnMajorMatrixStorage < Complex > denseOther )
915925 {
926+ var denseOtherData = denseOther . Data ;
927+
916928 // in this case we can directly address the underlying data-array
917929 for ( var row = 0 ; row < RowCount ; row ++ )
918930 {
@@ -930,7 +942,7 @@ protected override void DoMultiply(Matrix<Complex> other, Matrix<Complex> result
930942 var sum = Complex . Zero ;
931943 for ( var index = startIndex ; index < endIndex ; index ++ )
932944 {
933- sum += values [ index ] * denseOther . Data [ otherColumnStartPosition + columnIndices [ index ] ] ;
945+ sum += values [ index ] * denseOtherData [ otherColumnStartPosition + columnIndices [ index ] ] ;
934946 }
935947
936948 result . At ( row , column , sum ) ;
@@ -1098,11 +1110,14 @@ protected override void DoTransposeAndMultiply(Matrix<Complex> other, Matrix<Com
10981110 var values = _storage . Values ;
10991111
11001112 var otherStorage = otherSparse . _storage ;
1113+ var otherStorageRowPointers = otherStorage . RowPointers ;
1114+ var otherStorageColumnIndices = otherStorage . ColumnIndices ;
1115+ var otherStorageValues = otherStorage . Values ;
11011116
11021117 for ( var j = 0 ; j < RowCount ; j ++ )
11031118 {
1104- var startIndexOther = otherStorage . RowPointers [ j ] ;
1105- var endIndexOther = otherStorage . RowPointers [ j + 1 ] ;
1119+ var startIndexOther = otherStorageRowPointers [ j ] ;
1120+ var endIndexOther = otherStorageRowPointers [ j + 1 ] ;
11061121
11071122 if ( startIndexOther == endIndexOther )
11081123 {
@@ -1124,10 +1139,10 @@ protected override void DoTransposeAndMultiply(Matrix<Complex> other, Matrix<Com
11241139 var sum = Complex . Zero ;
11251140 for ( var index = startIndexOther ; index < endIndexOther ; index ++ )
11261141 {
1127- var ind = _storage . FindItem ( i , otherStorage . ColumnIndices [ index ] ) ;
1142+ var ind = _storage . FindItem ( i , otherStorageColumnIndices [ index ] ) ;
11281143 if ( ind >= 0 )
11291144 {
1130- sum += otherStorage . Values [ index ] * values [ ind ] ;
1145+ sum += otherStorageValues [ index ] * values [ ind ] ;
11311146 }
11321147 }
11331148
0 commit comments