C# 具有复杂对象的ML.NET LoadFromEnumerable
我想从复杂对象创建C# 具有复杂对象的ML.NET LoadFromEnumerable,c#,ml.net,C#,Ml.net,我想从复杂对象创建IDataView 假设我的对象是这些简单的类: class-Foo { 公共条{get;set;} } 分类栏 { 公共int num{get;set;} } (当然,在我的代码中,Foo中有更多的字段,其中一些是对象或集合) 现在,我正在尝试加载Foos的集合,其中包含: var mlContext=new mlContext(); var foos=新列表 { 新富 { 条=新条{num=5} }, 新富 { 条=新条{num=5} } }.AsEnumerable(
IDataView
假设我的对象是这些简单的类:
class-Foo
{
公共条{get;set;}
}
分类栏
{
公共int num{get;set;}
}
(当然,在我的代码中,Foo
中有更多的字段,其中一些是对象或集合)
现在,我正在尝试加载Foo
s的集合,其中包含:
var mlContext=new mlContext();
var foos=新列表
{
新富
{
条=新条{num=5}
},
新富
{
条=新条{num=5}
}
}.AsEnumerable();
var dataview=mlContext.Data.LoadFromEnumerable(foos);
我得到了一个错误:
System.ArgumentOutOfRangeException:无法确定成员栏的IDataView类型
参数名称:rawType
即使我将条
对象注册为,也没有比这更好的了:
DataViewTypeManager.Register(NumberDataViewType.Int32,typeof(Bar));
您希望ML.NET如何“神奇地”将Bar类型的对象转换为int而不提供任何附加信息?如果我是你,我会把你的对象图展平到“记录”上format@jakobandersen我现在正在展平我的对象结构:-)。我希望ml.net
也能这样做。使用名为bar\u num
或类似内容的列。当列名按我们传递的字段顺序排列时,这肯定是一个唯一的名称。唯一的问题是对象引用中的递归。@baruchiro您可能希望将标题中的方法名称“LoadFromEnumerate”更改为“LoadFromEnumeratable”,这可能会使线程更容易找到。我遇到了同样的问题&还没有找到解决方案。您希望ML.NET如何“神奇地”将Bar类型的对象转换为int而不提供任何其他信息?如果我是你,我会把你的对象图展平到“记录”上format@jakobandersen我现在正在展平我的对象结构:-)。我希望ml.net
也能这样做。使用名为bar\u num
或类似内容的列。当列名按我们传递的字段顺序排列时,这肯定是一个唯一的名称。唯一的问题是对象引用中的递归。@baruchiro您可能希望将标题中的方法名称“LoadFromEnumerate”更改为“LoadFromEnumeratable”,这可能会使线程更容易找到。我遇到了同样的问题&还没有找到解决办法。