12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package pb
- import "sort"
- func ToBurndownSparseMatrix(matrix [][]int64, name string) *BurndownSparseMatrix {
- r := BurndownSparseMatrix{
- Name: name,
- NumberOfRows: int32(len(matrix)),
- NumberOfColumns: int32(len(matrix[len(matrix)-1])),
- Rows: make([]*BurndownSparseMatrixRow, len(matrix)),
- }
- for i, status := range matrix {
- nnz := make([]uint32, 0, len(status))
- changed := false
- for j := range status {
- v := status[len(status) - 1 - j]
- if v < 0 {
- v = 0
- }
- if !changed {
- changed = v != 0
- }
- if changed {
- nnz = append(nnz, uint32(v))
- }
- }
- r.Rows[i] = &BurndownSparseMatrixRow{
- Columns: make([]uint32, len(nnz)),
- }
- for j := range nnz {
- r.Rows[i].Columns[j] = nnz[len(nnz) - 1 - j]
- }
- }
- return &r
- }
- func DenseToCompressedSparseRowMatrix(matrix [][]int64) *CompressedSparseRowMatrix {
- r := CompressedSparseRowMatrix{
- NumberOfRows: int32(len(matrix)),
- NumberOfColumns: int32(len(matrix[0])),
- Data: make([]int64, 0),
- Indices: make([]int32, 0),
- Indptr: make([]int64, 1),
- }
- r.Indptr[0] = 0
- for _, row := range matrix {
- nnz := 0
- for x, col := range row {
- if col != 0 {
- r.Data = append(r.Data, col)
- r.Indices = append(r.Indices, int32(x))
- nnz += 1
- }
- }
- r.Indptr = append(r.Indptr, r.Indptr[len(r.Indptr) - 1] + int64(nnz))
- }
- return &r
- }
- func MapToCompressedSparseRowMatrix(matrix []map[int]int64) *CompressedSparseRowMatrix {
- r := CompressedSparseRowMatrix{
- NumberOfRows: int32(len(matrix)),
- NumberOfColumns: int32(len(matrix)),
- Data: make([]int64, 0),
- Indices: make([]int32, 0),
- Indptr: make([]int64, 1),
- }
- r.Indptr[0] = 0
- for _, row := range matrix {
- order := make([]int, len(row))
- i := 0
- for col := range row {
- order[i] = col
- i++
- }
- sort.Ints(order)
- for _, col := range order {
- val := row[col]
- r.Data = append(r.Data, val)
- r.Indices = append(r.Indices, int32(col))
- }
- r.Indptr = append(r.Indptr, r.Indptr[len(r.Indptr) - 1] + int64(len(row)))
- }
- return &r
- }
|