八度 - 获取结构摘要的简单方法是什么?

时间:2014-01-11 22:32:53

标签: matlab data-structures octave

在Octave / MATLAB中加载不同的科学数据集时,我通常要做的第一件事就是弄清楚数据是如何组织的(它总是不同的)。通常它们有一个巨大的结构,有几个不同的成员。我想找到他们的名字,尺寸和类型。单线是最好的。

示例结构是

DDATA:

  • ddata.sig,尺寸350x120x280,数字
  • ddata.prd,尺寸350x280,数字
  • ddata.labels大小1x280,二进制

作为汇总函数的一个例子,R有一个非常有用的函数summary()(尽管它没有给出维度):

> summary(filedatas[[1]])
    Length   Class  Mode   
cnt 35218280 -none- numeric
nfo        5 -none- list   
mrk        3 -none- list

2 个答案:

答案 0 :(得分:2)

听起来像whosdisp最接近您所追求的内容 - 只需输入变量名即可调用disp。对于标量和矩阵,它显示内容,但对于结构,您将获得字段摘要。这是一个使用我可以手上的第一个随机数据集的例子:

octave-3.6.4.exe:3> load ax204.mat
octave-3.6.4.exe:4> whos
Variables in the current scope:

   Attr Name         Size                     Bytes  Class
   ==== ====         ====                     =====  =====
        dc           1x1                        119  struct
        index        1x989                     7912  double
        objects      1x989                 15998424  struct

Total is 1979 elements using 16006455 bytes

octave-3.6.4.exe:5> dc
dc =

  scalar structure containing the fields:

    fps =  2
    hdr =
    {
      [1,1] = Frame
      [1,2] = Time
      [1,3] = Speed
      [1,4] = X Cent
      [1,5] = Y Cent
      [1,6] = Length
      [1,7] = AvgWid
      [1,8] = Peri
      [1,9] = Round
    }
    f =  1
    t =  2
    x =  4
    y =  5
    l =  6
    aw =  7
    p =  8
    r =  9

octave-3.6.4.exe:6> objects
objects =

  1x989 struct array containing the fields:

    id
    data
    n
    dir
    dist
    turn
    reversals
    merge
    omg
    rev
    defrev
    begfr
    endfr
    previd
    begtm
    endtm
    begxpos
    endxpos
    begypos
    endypos
    xcent
    ycent
    spd
    db
    ab

如果结构域是非标量的,那么IIRC Matlab是合理的,并且说fieldname: [200x300 double]之类的东西,而Octave则快乐地转储整个内容。

答案 1 :(得分:2)

这并不像看起来那么容易。请注意,struct可以是struct数组,每个结构的每个字段可以有不同的数据类型。在这种情况下,summary函数如何表现?

例如:

struct ("field1", {"text", 90}, "field2", {{1:3, "more"}, struct()})

也就是说,Octave有一些函数来定义结构的显示方式,print_struct_array_contentsstruct_levels_to_print,请参阅its manual