【问题标题】:What does the . operator do in matlab?有什么作用。运算符在matlab中做什么?
【发布时间】:2012-05-13 12:46:42
【问题描述】:

我遇到了一些执行以下操作的 matlab 代码:

thing.x=linspace(...

我知道. 运算符通常会按元素进行下一个操作,但它自己做了什么?这只是像 C++ 中的子对象运算符吗?

【问题讨论】:

    标签: matlab operators dot-operator


    【解决方案1】:

    是的,它的子对象。

    你可以拥有类似的东西 Roger.lastname = "贵宾犬"; 罗杰.SSID = 111234997; Roger.children.boys = {“吉姆”,“约翰”}; Roger.children.girls = {“露西”};

    点右边的东西称为字段。

    您还可以在 Matlab 中定义类,实例化这些类的对象,然后如果 thing 是这些对象之一,thing.x 将是该对象中的一个实例变量。

    matlab 文档非常好,在里面查找“字段”和“类”。

    .M*N还有其他用途,表示两个东西相乘,如果MN都是矩阵,这实现了矩阵相乘的规则,得到一个新的矩阵作为结果。但是M.*N 的意思是,如果 M、N 的形状相同,则将每个元素相乘。因此,没有更多微妙之处,但超出了您在此处询问的范围。

    正如@marc 指出的那样,点也用于引用matlab 称为结构或结构的东西的字段和子字段。在我看来,这些很像类、子类和枚举。这个想法是你可以有一个结构 data 说,并存储所有与数据相关的信息,如下所示:

    olddata = data; % we assume we have an old struct like the one we are creating, we keep a reference to it
    
    data.date_created=date();
    data.x_axis = [1 5 2 9];
    data.notes = "This is just a trivial example for stackoverflow.  I didn't check to see if it runs in matlab or not, my bad."
    data.versions.current = "this one";
    data.versions.previous = olddata;
    

    重点是任何 matlab 对象/数据类型/无论您想调用什么,都可以由结构中的字段引用。最后一项表明我们甚至可以在结构的字段中引用另一个结构。最后一点的含义是我们可以查看以前版本的创建日期:

    data.versions.previous.date_created
    

    对我来说,这看起来就像 java 中的对象,除了我没有在其中放置任何方法。 Matlab 确实支持 java 对象,这些对象在我看来很像这些结构,除了一些字段可以引用函数。

    【讨论】:

    • 我的印象是.* 是元素乘法运算符。 +.* 有什么不同?
    • +.* 是仅在 APL 中的运算符,而不是在 MATLAB 中。
    • @woodchips 哎呀,我在 35 年前学习了 APL,它仍然困扰着我的梦想。我通过编辑修复了“错字”。
    • 它也用于访问结构成员。
    • @Marc 我在上面明确添加了对结构的提及以庆祝获得支持。
    【解决方案2】:

    根据 mwengler 的回答,从技术上讲,它是一种索引形式。但是,它也可以用于最近版本的 MATLAB 中对象的方法调用,即

    obj.methodCall;
    

    但是请注意,这种风格存在一些低效率 - 基本上,系统必须首先确定您是否要对字段进行索引,如果不是,则调用该方法。这样做更有效率

    methodCall(obj);
    

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2022-01-16
      相关资源
      最近更新 更多