Ejemplo n.º 1
0
        public void Test_ProcessMultiple_WithRowName_ColumnName()
        {
            // Given
            DataFrameRowNameColumnNameOperator <double> rowOperator = (rowName, colName, currentVal) =>
            {
                if (colName == "Col1" && rowName != 101)
                {
                    return(Math.Pow(currentVal, 2));
                }

                return(currentVal);
            };

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

            var baseDataFrame = TestDataBuilder.BuildSmallDataFrameNumbersOnly();

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

            // Then
            Assert.IsTrue(expectedMatrix.Equals(actualMatrix));
        }
Ejemplo n.º 2
0
        public IDataFrame ProcessMultiple <TValue>(DataFrameRowNameColumnNameOperator <TValue> rowOperator)
        {
            var newData = DataTable.DefaultView.ToTable();

            Parallel.For(0, newData.Rows.Count, rowIdx =>
            {
                var row     = newData.Rows[rowIdx];
                var rowName = this.rowIndices[rowIdx];
                for (int colIdx = 0; colIdx < row.ItemArray.Length; colIdx++)
                {
                    var newVal = rowOperator(rowName, ColumnNames[colIdx], (TValue)Convert.ChangeType(row[colIdx], typeof(TValue)));
                    lock (this.locker)
                    {
                        row[colIdx] = newVal;
                    }
                }
            });
            return(new DataFrame(newData, new List <int>(RowIndices)));
        }