@@ -92,5 +92,44 @@ public static Array Inverse(Array arr)
92
92
Internal . VERIFY ( AFLapack . af_inverse ( out ptr , arr . _ptr , af_mat_prop . AF_MAT_NONE ) ) ;
93
93
return new Array ( ptr ) ;
94
94
}
95
- }
95
+
96
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
97
+ public static Array ExtractDiagonal ( Array arr , int diagonalIndex = 0 )
98
+ {
99
+ IntPtr ptr ;
100
+ Internal . VERIFY ( AFData . af_diag_extract ( out ptr , arr . _ptr , diagonalIndex ) ) ;
101
+ return new Array ( ptr ) ;
102
+ }
103
+
104
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
105
+ public static Array CreateDiagonal ( Array arr , int diagonalIndex = 0 )
106
+ {
107
+ IntPtr ptr ;
108
+ Internal . VERIFY ( AFData . af_diag_create ( out ptr , arr . _ptr , diagonalIndex ) ) ;
109
+ return new Array ( ptr ) ;
110
+ }
111
+
112
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
113
+ public static Array Lower ( Array arr , bool unitDiagonal = false )
114
+ {
115
+ IntPtr ptr ;
116
+ Internal . VERIFY ( AFData . af_lower ( out ptr , arr . _ptr , unitDiagonal ) ) ;
117
+ return new Array ( ptr ) ;
118
+ }
119
+
120
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
121
+ public static Array Upper ( Array arr , bool unitDiagonal = false )
122
+ {
123
+ IntPtr ptr ;
124
+ Internal . VERIFY ( AFData . af_upper ( out ptr , arr . _ptr , unitDiagonal ) ) ;
125
+ return new Array ( ptr ) ;
126
+ }
127
+
128
+ #region Convenience methods
129
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
130
+ public static Array Identity < T > ( int dim0 , int dim1 ) { return Data . Identity < T > ( dim0 , dim1 ) ; }
131
+
132
+ public static T [ , ] GetData < T > ( Array arr ) { return Data . GetData2D < T > ( arr ) ; }
133
+ #endregion
134
+ }
96
135
}
0 commit comments