public static void CopyRow(SparseRowMatrixList to, int row, SparseRowMatrixList from, int fromRow)
        {
            int frl = from.rowLength(fromRow);

            if (frl == 0)
            {
                return;
            }

            //Console.WriteLine("Copyrow - "+ to.NonZeroValueCount+  " ," + to.val.Length +" ,"+ frl+" ,"+ (frl/ARRAYINCREMENT)  );
            if (!to.val.ContainsKey(row))
            {
                to.val.Add(row, new SparseRowValue[from.val[fromRow].Length]);
            }
            else if (to.val[row].Length < from.val[fromRow].Length)
            {
                SparseRowValue[] rowArr = to.val[row];
                Array.Resize(ref rowArr, from.val[fromRow].Length);
                to.val[row] = rowArr;
            }

            Array.Copy(from.val[fromRow], to.val[row], from.val[fromRow].Length);
        }
        public SparseMatrix Transpose()
        {
            SparseRowMatrixList trans = new SparseRowMatrixList(colCount, rowCount);

            int[] rowCounts = new int[colCount];
            rowCounts.Initialize();

            for (int i = 0; i < rowCount; i++)
            {
                int len = (val.ContainsKey(i)) ? val[i].Length : 0;
                for (int j = 0; j < len; j++)
                {
                    rowCounts[val[i][j].index]++;
                }
            }

            for (int i = 0; i < colCount; i++)
            {
                trans.val[i] = new SparseRowValue[rowCounts[i]];
                rowCounts[i] = 0;
            }

            for (int i = 0; i < rowCount; i++)
            {
                int len = (val.ContainsKey(i)) ? val[i].Length : 0;
                for (int j = 0; j < len; j++)
                {
                    int col = val[i][j].index;
                    trans.val[col][rowCounts[col]].index = i;
                    trans.val[col][rowCounts[col]].value = val[i][j].value;
                    rowCounts[col]++;
                }
            }

            return(trans);
        }
 public void CopyRow(int toRow, SparseMatrix from, int fromRow)
 {
     SparseRowMatrixList.CopyRow(this, toRow, (SparseRowMatrixList)from, fromRow);
 }