示例#1
0
        public IDataFrame ProcessMultiple <TValue>(DataFrameRowIndexColumnIndexOperator <TValue> rowOperator)
        {
            var newData = DataTable.DefaultView.ToTable();

            Parallel.For(0, newData.Rows.Count, rowIdx =>
            {
                var row = newData.Rows[rowIdx];
                for (int colIdx = 0; colIdx < ColumnNames.Count; colIdx++)
                {
                    var newVal = rowOperator(rowIdx, colIdx, (TValue)Convert.ChangeType(row[colIdx], typeof(TValue)));
                    lock (this.locker)
                    {
                        newData.Rows[rowIdx][colIdx] = newVal;
                    }
                }
            });
            return(new DataFrame(newData, new List <int>(RowIndices)));
        }
示例#2
0
        public void Test_ProcessMultiple_WithRowIndex_ColumnIndex()
        {
            // Given
            DataFrameRowIndexColumnIndexOperator <double> rowOperator =
                (rowIdx, colIdx, currentVal) => colIdx == 0 ? Math.Pow(currentVal, 2) : currentVal;

            var expectedMatrix =
                Matrix <double> .Build.DenseOfArray(new double[, ] {
                { 1, 2, 3, 4 }, { 25, 6, 7, 8 }, { 81, 10, 11, 12 }
            });

            var baseDataFrame = TestDataBuilder.BuildSmallDataFrameNumbersOnly();

            // When
            var actualMatrix = baseDataFrame.ProcessMultiple(rowOperator).GetAsMatrix();

            // Then
            Assert.IsTrue(expectedMatrix.Equals(actualMatrix));
        }