• Matlab指针数组


    Matlab指针数组

    前面博客Matlab指针中介绍了如何在Matlab中使用handle类型对象作为指针使用,本文则介绍一些使用这些类型指针的小技巧。

    自定义类型的指针数组

    在大部分编程语言中,我们都可以采用结构体来定义一些自定义类型。对于多个自定义类型的变量数据组合,我们可以采用指针指向各个变量,然后将所有指针组成一个数组储存起来(自定义类型指针数组)。如此便获得了能够访问所有变量数据的简单方法。

    举例来说,每个netcdf文件中都会包含多个变量,若每个变量都使用一个指针代替,并且将这些指针组成一个数组varArray,那么在代表netcdf文件的对象中,只需要一个成员变量varArray即可访问所有变量所包含的内容,而不再需要将每个变量的指针都作为成员变量储存起来。

    Matlab中指针数组

    在 Matlab 中,实现上面的过程就稍显复杂。首先,Matlab 并没有普通的指针,需使用handle类对象来代替。其次,相同类型的handle对象组成数组时需要特殊方法。

    Matlab中一般的实数数组可以先声明(申请内存),随后对数组元素进行赋值。

    np = 3
    a  = zeros(np)
    for i = 1:np
        a(np) = i^2;
    end% for
    

    但是这种方法并不适用于指针数组。

    >> help zeros
     zeros  Zeros array.
        ......
     
        zeros(..., CLASSNAME) is an array of zeros of class specified by the
        string CLASSNAME.
     
        ......
    

    查看help zeros命令可以看到,zeros可以生成某种类型变量(CLASSNAME),但是可惜的是,这并不包括用户的自定义类型。

    >> a = zeros(3, 'StdRegions.Line')
    Error using zeros
    CLASSNAME input must be a valid numeric or logical class name.
    

    因此,唯一的一种办法就是用大括号将各个指针连接起来变成一个数组。如

    linArray = [];
    for i = 1:3
        t = StdRegions.Line(i);
        linArray = [t, linArray];
    end
    

    注意需要首相将数组赋值为空向量,否则会报错。得到结果为

    >> linArray
    
    linArray = 
    
      1x3 Line array with properties:
    
  • 相关阅读:
    2014年广州区域赛k题解
    2014年广州区域赛e题解
    2014年广州区域赛i题解
    最大化平均值问题
    codeforces 976e 题解
    maven
    机器学习入门
    拟合
    插值
    熵权法
  • 原文地址:https://www.cnblogs.com/li12242/p/5774211.html
Copyright © 2020-2023  润新知