C# ILNumerics:ILArray<;T>;作为实例变量;

C# ILNumerics:ILArray<;T>;作为实例变量;,c#,instance-variables,ilnumerics,instance-methods,C#,Instance Variables,Ilnumerics,Instance Methods,我用数字来表示一些时间序列 理想情况下,我希望将所有数据封装到一个面向对象的系统中,因此,使用实例变量和实例方法来处理这些变量 我有几个问题,但都与在类中以有效的方式(可能是作为实例变量)实现iArray的最佳方式有关。我已经阅读了相关文档并检查了前面的SO示例,但似乎没有一个能够明确地解决这些问题 第一:网站上提出的“阵列利用率类”示例 [来源:]似乎没有编译,至少在ILNumerics试用版和VS 2013 professional(.net 4.5)中是这样。我错过什么了吗 还是因为这部分

我用数字来表示一些时间序列

理想情况下,我希望将所有数据封装到一个面向对象的系统中,因此,使用实例变量和实例方法来处理这些变量

我有几个问题,但都与在类中以有效的方式(可能是作为实例变量)实现iArray的最佳方式有关。我已经阅读了相关文档并检查了前面的SO示例,但似乎没有一个能够明确地解决这些问题

第一:网站上提出的“阵列利用率类”示例 [来源:]似乎没有编译,至少在ILNumerics试用版和VS 2013 professional(.net 4.5)中是这样。我错过什么了吗

还是因为这部分代码:

public ILRetArray<double> A 
{
  get 
  { 
    // lazy initialization 
    if (m_a.IsEmpty) 
    {
       m_a.a = ILMath.rand(100,100); 
    }
  }
  set { m_a.a = value; }
如何访问向量的特定组件:假设我们想要 m_a[0]=2.2;这会妨碍内存管理吗

一般来说,在我看来,使用ILNumerics的自然方式是通过静态方法,就像用Fortran(或者可能是R/Matlab)编写代码一样:到目前为止,我就是这样使用它的。我说得对吗?或者类定义中使用ILArray类型作为实例变量和相关方法应该是高效和直接的吗


或者,您是否建议采用系统数组作为实例变量,然后仅通过静态方法导入/导出到iArray以执行数组操作?我倾向于避免此路径,或者希望尽可能限制此路径。

文档部分“”已更新。正如您所说,示例代码中有一个错误

将iArray实例修改为类成员 按照文档中描述的规则,所有数组成员都将是ILArray类型(或不合逻辑或ILCell)。这些类型是可变类型。你可以在他们的一生中自由地改变他们<代码>m_a[0]=2.2按预期工作。您还可以决定完全替换阵列:

m_a.a = ILMath.rand(2,3,5);  
请记住,不是简单地分配给数组,而是对数组使用
.a=
属性或
.assign()
方法。编译器将防止错误赋值,因为您已将数组声明为
只读

这样的更改确实可以顺利地进行内存管理

混合静态方法和类实例 只要关注以下两个方面的规则:函数(ILScope块、不同的输入参数数组类型、通过.a属性的赋值)和类(
readonly iArray
declaration、
ILMath.localMember
initialization),您就可以自由地混合这两种方案。它将以两种方式工作,并立即重用不再需要的所有内存

将System.Array的密集使用与另一端的iArray混用可能会导致不利的分配模式。通常,从System.Array创建iArray很容易。如果System.Array适合存储方案(即,如果它是一维的),则它将直接由iArray使用。但另一种方法不是很有效。它通常涉及数据的一个副本,ILNumerics内存管理也不能有效地工作


这就是为什么我们建议留在ILArray之类的地方。正如你所看到的,有一些规则需要记住,但通常你会很快将它们内在化

有一件事是肯定的。上面代码中的属性
A
是不合法的,因为它有一个
get
访问器,可以访问getter主体的端点(任何地方都没有
return
,并且没有任何东西(如
throw
或infinite loop)阻止控件流向
get
“块”的末尾)。
get
访问器就像一个返回类型为属性类型的方法(尤其不是
void
)。编辑:也许他们想写
返回m_a.aif
块之后,code>找到了您想要链接的页面(上面断开的链接已修复),并且在
get
访问器的末尾有一个
return
语句。@JeppeStigNielsen是的,我想这就是他们的意思;我猜在这篇文章之后,这个类型已经被ILNumerics修复了。我写这篇文章的时候就已经报道了。感谢您在我以前的评论类型-->打字错误中的评论;让一个打字错误难堪。
m_a.a = ILMath.rand(2,3,5);