如何在Octave中探索对象的结构和尺寸?

时间:2017-03-29 21:54:07

标签: r database matlab data-structures octave

Im Matlab properties function听起来像R中的命令可能有效等效,使您熟悉工作环境中的特定对象,提供有关其结构的信息(data.frame,matrix,list,vector)和变量类型(字符,数字)(例如,使用R命令str()),维度(可能使用调用dim())和变量名称(names())。

但是,此功能在Octave中无法运行:

>> properties(data)
warning: the 'properties' function is not yet implemented in Octave

我按照上面链接的帖子的评论中的建议安装了包dataframe

pkg install -forge dataframe并加载pkg load dataframe

但我找不到在工作区中获取datset data.mat的结构和维度摘要的方法。

我相信它是一个由4 x 372,550数值矩阵组成的结构;两个4 x 46,568数值矩阵和一个256 x 1字符矩阵。要获得此信息,我必须滚动浏览数据的许多页面。

此信息在Octave IDE上不可用,我得到:

Name      Class     Dimensions
data      struc     1 x 1

与对象data的复杂性相去甚远。

在Octave中获取有关工作区中对象的一些信息的智能方法是什么?

对提供的第一个答案进行跟进,以下是whos

的内容
>> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        data        1x1                    7452040  struct

Total is 1 element using 7452040 bytes

这对于data真正包含的内容并不特别有用。事实上,我刚刚发现了一种在data中提取名称的方法:

>> fieldnames(data)
ans =
{
  [1,1] = testData
  [2,1] = trainData
  [3,1] = validData
  [4,1] = vocab
}

现在如果我打电话

>> size(data)
ans =

   1   1

输出不是很有用。另一方面,知道data中我可以做的矩阵的名称

>> size(data.trainData)
ans =

        4   372550

确实提供了丰富的信息。

1 个答案:

答案 0 :(得分:2)

如果您输入变量的名称,您将会看到有关它的信息。在你的情况下,它是一个结构,所以它会告诉你字段名称。相关功能包括:sizendimsclassfieldnames等。

size(var)
class(var)

您可以参考.mat。也许您有一个MAT文件,可以使用load filename加载。加载后,您可以检查并使用文件中的变量。

whos

打印关于内存中变量的简单信息,最有用的是查看存在哪些变量。

跟进您编辑过的问题。这适用于Octave:

for s=fieldnames(data)'
   s=s{1};
   tmp=data.(s);
   disp([s,' - ',class(tmp),' - ',mat2str(size(tmp))])
end

它打印结构的每个成员的基本信息。它确实假设data是一个1x1结构数组。请注意,struct可以是一个数组:

data(2).testData = [];

使data结构成为2x1数组。这就是size(data)相关的原因。 class也很重要(它显示在whos的输出中。变量可以是double类型(普通数组),也可以是其他数字类型logicalstructcell(数组数组),或者您自己编写的自定义类。

我强烈建议您阅读关于MATLAB / Octave的介绍性文本,因为它与R的工作方式截然不同。它不仅仅是一种不同的语言,它还是一个完全不同的世界。