public DataView(IHostEnvironment env, ArrayDataViewBuilder builder, int rowCount) { Contracts.AssertValue(env, "env"); _host = env.Register("ArrayDataView"); _host.AssertValue(builder); _host.Assert(rowCount >= 0); _host.Assert(builder._names.Count == builder._columns.Count); _columns = builder._columns.ToArray(); var schemaBuilder = new SchemaBuilder(); for (int i = 0; i < _columns.Length; i++) { var meta = new MetadataBuilder(); if (builder._getSlotNames.TryGetValue(builder._names[i], out var slotNamesGetter)) { meta.AddSlotNames(_columns[i].Type.GetVectorSize(), slotNamesGetter); } if (builder._getKeyValues.TryGetValue(builder._names[i], out var keyValueGetter)) { meta.AddKeyValues(_columns[i].Type.GetKeyCount(), TextType.Instance, keyValueGetter); } schemaBuilder.AddColumn(builder._names[i], _columns[i].Type, meta.GetMetadata()); } _schema = schemaBuilder.GetSchema(); _rowCount = rowCount; }
/// <summary> /// This is very similar to <see cref="Create(DataViewType, string, string)"/> but adds one extra metadata field to the only score column. /// </summary> /// <param name="scoreType">Output element's type of quantile regressor. Note that a quantile regressor can produce an array of <see cref="PrimitiveDataViewType"/>.</param> /// <param name="quantiles">Quantiles used in quantile regressor.</param> /// <returns><see cref="DataViewSchema"/> of quantile regressor's output.</returns> public static DataViewSchema CreateQuantileRegressionSchema(DataViewType scoreType, double[] quantiles) { Contracts.CheckValue(scoreType, nameof(scoreType)); Contracts.CheckValue(scoreType as PrimitiveDataViewType, nameof(scoreType)); Contracts.AssertValue(quantiles); // Create a schema using standard function. The produced schema will be modified by adding one metadata column. var partialSchema = Create(new VectorType(scoreType as PrimitiveDataViewType, quantiles.Length), MetadataUtils.Const.ScoreColumnKind.QuantileRegression); var metadataBuilder = new MetadataBuilder(); // Add the extra metadata. metadataBuilder.AddSlotNames(quantiles.Length, (ref VBuffer <ReadOnlyMemory <char> > value) => { var bufferEditor = VBufferEditor.Create(ref value, quantiles.Length); for (int i = 0; i < quantiles.Length; ++i) { bufferEditor.Values[i] = string.Format("Quantile-{0}", quantiles[i]).AsMemory(); } value = bufferEditor.Commit(); }); // Copy default metadata from the partial schema. metadataBuilder.Add(partialSchema[0].Metadata, (string kind) => true); // Build a schema consisting of a single column. Comparing with partial schema, the only difference is a metadata field. var schemaBuilder = new SchemaBuilder(); schemaBuilder.AddColumn(partialSchema[0].Name, partialSchema[0].Type, metadataBuilder.GetMetadata()); return(schemaBuilder.GetSchema()); }
public RowMapper(IHostEnvironment env, BindableMapper parent, RoleMappedSchema schema) { Contracts.AssertValue(env); _env = env; _env.AssertValue(schema); _env.AssertValue(parent); _env.Assert(schema.Feature.HasValue); _parent = parent; InputRoleMappedSchema = schema; var genericMapper = parent.GenericMapper.Bind(_env, schema); _genericRowMapper = genericMapper as ISchemaBoundRowMapper; var featureSize = FeatureColumn.Type.GetVectorSize(); if (parent.Stringify) { var builder = new SchemaBuilder(); builder.AddColumn(DefaultColumnNames.FeatureContributions, TextType.Instance, null); _outputSchema = builder.GetSchema(); if (FeatureColumn.HasSlotNames(featureSize)) { FeatureColumn.Metadata.GetValue(MetadataUtils.Kinds.SlotNames, ref _slotNames); } else { _slotNames = VBufferUtils.CreateEmpty <ReadOnlyMemory <char> >(featureSize); } } else { var metadataBuilder = new MetadataBuilder(); if (InputSchema[FeatureColumn.Index].HasSlotNames(featureSize)) { metadataBuilder.AddSlotNames(featureSize, (ref VBuffer <ReadOnlyMemory <char> > value) => FeatureColumn.Metadata.GetValue(MetadataUtils.Kinds.SlotNames, ref value)); } var schemaBuilder = new SchemaBuilder(); var featureContributionType = new VectorType(NumberType.R4, FeatureColumn.Type as VectorType); schemaBuilder.AddColumn(DefaultColumnNames.FeatureContributions, featureContributionType, metadataBuilder.GetMetadata()); _outputSchema = schemaBuilder.GetSchema(); } _outputGenericSchema = _genericRowMapper.OutputSchema; OutputSchema = new ZipBinding(new Schema[] { _outputGenericSchema, _outputSchema, }).OutputSchema; }