什么是。运算符在matlab中做?

时间:2012-05-03 23:54:42

标签: matlab operators dot-operator

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

thing.x=linspace(...

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

2 个答案:

答案 0 :(得分:2)

是的子对象。

你可以拥有类似的东西     Roger.lastname =“贵宾犬”;     Roger.SSID = 111234997;     Roger.children.boys = {“Jim”,“John”};     Roger.children.girls = {“Lucy”};

点右边的东西称为字段。

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

matlab文档非常好,在其中查找“fields”和“classes”。

.还有其他用途,M*N表示多重合作两件事,如果MN都是矩阵,则实现矩阵乘法的规则以获得新矩阵作为结果。但是M.*N意味着,如果M,N是相同的形状,则乘以每个元素。所以没有更多细微之处,但超出了你在这里所要求的范围。

正如@marc指出的那样,dot也用于引用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对象,这些对象看起来很像这些结构,除了一些字段可以引用函数。

答案 1 :(得分:2)

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

obj.methodCall;

但请注意,该样式存在一些效率低下 - 基本上,如果您想要将字段索引到字段中,系统必须首先计算出来,如果没有,则调用该方法。

更有效率
methodCall(obj);