【问题标题】:How to explore the structure and dimensions of an object in Octave?如何在 Octave 中探索对象的结构和尺寸?
【发布时间】:2017-03-29 21:54:06
【问题描述】:

我是 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

但我找不到在工作区中获取数据集 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 1] 的输出很有用。它告诉你你有一个标量结构,而不是一个包含多个元素的结构数组。

标签: r database matlab data-structures octave


【解决方案1】:

如果您键入变量的名称,您将看到有关它的信息。在您的情况下,它是一个结构,因此它会告诉您字段名称。相关函数有:sizendimsclassfieldnames

size(var)
class(var)

等等

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

whos

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


跟进您编辑的问题。这适用于八度:

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

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

data(2).testData = [];

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

我强烈建议阅读有关 MATLAB/Octave 的介绍性文本,因为它的工作原理与 R 非常不同。这不仅仅是一种不同的语言风格,而是一个完全不同的世界。

【讨论】:

  • 谢谢。除非我调用 data 中的特定矩阵(请参阅编辑后的 ​​OP),否则它并不完全有效。
  • 哦,我现在明白了。我刚刚在 Octave 中尝试过,确实它打印了struct 中的所有矩阵。如果包含的矩阵有多个值,MATLAB 不会执行此操作,因此仅键入 data 的输出在此处更有用。
  • @Toni。我已经在我的答案中添加了一些内容,我希望这能澄清一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2012-08-24
  • 2022-06-19
相关资源
最近更新 更多