Exemplo n.º 1
0
        public void Test_ProcessMultiple_WithRowName_ColumnIndex()
        {
            // Given
            DataFrameRowNameColumnIndexOperator <double> rowOperator = (rowName, colIdx, currentVal) =>
            {
                if (colIdx == 0 && 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));
        }
Exemplo n.º 2
0
        public IDataFrame ProcessMultiple <TValue>(DataFrameRowNameColumnIndexOperator <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, colIdx, (TValue)Convert.ChangeType(row[colIdx], typeof(TValue)));
                    lock (this.locker)
                    {
                        row[colIdx] = newVal;
                    }
                }
            });
            return(new DataFrame(newData, new List <int>(RowIndices)));
        }