首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ILNumerics: ILArray<T>作为实例变量;

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

Stack Overflow用户
提问于 2014-07-27 17:32:48
回答 1查看 262关注 0票数 1

我使用ILNumerics来表示某些时间序列。

理想情况下,我希望将所有数据封装为面向对象的la对象,从而使用实例变量和实例方法来处理这些变量。

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

首先:在“阵列利用类”网站上提出的示例(来源:http://ilnumerics.net/ClassRules.html)似乎没有编译,至少ILNumerics试用版和VS 2013专业版(.net 4.5)是这样的。我是不是遗漏了什么?

还是因为代码的这一部分:

代码语言:javascript
复制
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数组:

代码语言:javascript
复制
public void Do() 
{
    using (ILScope.Enter()) 
    {
       // assign via .a property only!
       m_a.a = m_a + 2; 
    }
}

如何才能访问向量的特定组件:假设我们想要类似于m_a =2.2的东西;这会妨碍内存管理吗?

作为一般的观察,在我看来,使用ILNumerics的自然方式是通过静态方法,就像人们用Fortran (或者可能用R/Matlab)编写代码一样:到目前为止,我就是这样使用它的。以ILArray类型作为实例变量和相关方法的类定义是否正确?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-27 18:26:01

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

将ILArray实例修改为类成员

通过遵循文档中描述的规则,所有数组成员都将是ILArray (或ILLogical或ILCell)类型。这些类型是可变的类型。你可以在他们有生之年自由地改变他们。m_a[0] = 2.2;按预期工作。还可以决定完全替换数组:

代码语言:javascript
复制
m_a.a = ILMath.rand(2,3,5);  

请记住,不是简单地分配给数组,而是使用数组上的.a =属性或.Assign()方法。编译器将防止您错误地赋值,因为您已经将数组声明为readonly

这样的修改确实可以顺利地处理内存管理。

混合静态方法和类实例

只要您关注这两种方案的规则:函数(ILScope块、不同的输入参数数组类型、通过.a属性的转让人)和类(readonly ILArray<T>声明、ILMath.localMember<T>初始化),您就可以自由地混合这两种方案。它将以两种方式工作,并重用所有不再需要的内存。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24983612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档