我们可以在 MATLAB 程序中使用 "dot" 吗?



我想问是否有任何可以实现可以使用点隔离器生成ID的程序"。例如:

a1.b2.c3 

请注意,我不想将其作为角色处理,它应该像一个单独的人。

相同

John.Paul.Hit

您已经可以做到了,如所指出的那样。但是,您应该认识到它的高效

A = 3;
B.C.D.E = 3;
whos A B
  Name      Size            Bytes  Class     Attributes
  A         1x1                 8  double              
  B         1x1               536  struct              

看到B比A的存储空间要多。

另外,您需要认识到A.B和A.C在MATLAB中不是不同的对象,而是同一结构的一部分A.实际上,如果我现在尝试创建A.B,它将会感到沮丧,因为A已经存在双。

A.B = 4
Warning: Struct field assignment overwrites a value with class "double". See MATLAB R14SP2 Release Notes, Assigning Nonstructure Variables As Structures
Displays Warning, for details. 
A = 
    B: 4

原始变量不再存在。

也有时间问题。结构的效率将降低。

timeit(@() A+2)
Warning: The measured time for F may be inaccurate because it is close to the estimated time-measurement overhead (3.8e-07 seconds).  Try measuring
something that takes longer. 
> In timeit at 132 
ans =
    9.821e-07
timeit(@() B.C.D+2)
ans =
   3.6342e-05

请参阅将2添加到A的速度是如此之快,以至于时间段难以测量它。但是在卑诗省添加2次的时间为30倍。

因此,最终,您可以通过结构来完成您想做的事情,但是有充分的理由不这样做,除非您对DOT有非常有效的需求。替代分离器在我所展示的方面更好。

A = 3;
A_B_C_D = 3;
whos A*
  Name         Size            Bytes  Class     Attributes
  A            1x1                 8  double              
  A_B_C_D      1x1                 8  double              

与这些变量中的任何一个相同的计算将同样快。

matlab已经使用该点作为IDS中的分隔符,特别是在结构及其字段的ID中。例如,执行

a.b = 3

创建一个称为a的结构,其中一个名为b的字段本身具有值3。阅读有关structures和功能struct的主题的文档。

不是您想要的。如上所述,该点在ML语法中具有特殊的含义,并且不能用作标识符本身的一部分。

最新更新