Если размерность вектора фиксирована, вы можете обойти ее во время выполнения:
private class SampleTemperatureDataVector
{
public DateTime Date { get; set; }
public float[] Temperature { get; set; }
}
обратите внимание, что этот тип не имеет аннотаций. Вы можете создать SchemaDefinition из него, а затем изменить эту схему. Начальное SchemaDefinition будет иметь свойство IsKnownSize
, установленное на false
. После модификации Size
будет установлен в размер, который вы установили, 3 в этом случае.
var data2 = new SampleTemperatureDataVector[]
{
new SampleTemperatureDataVector
{
Date = DateTime.UtcNow,
Temperature = new float[] {1.2f, 3.4f, 5.6f}
},
new SampleTemperatureDataVector
{
Date = DateTime.UtcNow,
Temperature = new float[] {1.2f, 3.4f, 5.6f}
},
};
int featureDimension = 3;
var autoSchema = SchemaDefinition.Create(typeof(SampleTemperatureDataVector));
var featureColumn = autoSchema[1];
var itemType = ((VectorDataViewType)featureColumn.ColumnType).ItemType;
featureColumn.ColumnType = new VectorDataViewType(itemType, featureDimension);
IDataView data3 = mlContext.Data.LoadFromEnumerable(data2, autoSchema);