public static T[] GetDiagonal <T>(this T[,] matrix, DiagonalType dType) { T[] array = new T[Math.Min(matrix.GetLength(0), matrix.GetLength(1))]; int rowIterator = 0; int colIterator = (dType == DiagonalType.Left) ? 0 : (Math.Min(matrix.GetLength(0), matrix.GetLength(1)) - 1); while ((dType == DiagonalType.Left) ? colIterator < Math.Min(matrix.GetLength(0), matrix.GetLength(1)) : colIterator >= 0) { array[colIterator] = matrix[rowIterator, colIterator]; rowIterator++; if (dType == DiagonalType.Left) { colIterator++; } else { colIterator--; } } return(array); }
public static extern SparseStatus cusparseSetMatDiagType(IntPtr descrA, DiagonalType diagType);