【问题标题】:can we use "dot" in our matlab program?我们可以在我们的matlab程序中使用“点”吗?
【发布时间】:2012-10-22 09:12:38
【问题描述】:

我想问是否有实现一个程序,可以生成带有点分隔符“。”的 ID。比如:

a1.b2.c3 

请注意,我不想将点作为字符处理,它应该像分隔符一样。

如果你在你的名字和你父亲的名字和你祖父的名字之间加上一个点,就像:

John.Paul.Hit

【问题讨论】:

标签: matlab


【解决方案1】:

正如所指出的,您已经可以这样做了。但是,您应该认识到它的效率会降低

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

原来的变量A已经不存在了。

还有时间问题。该结构的效率会降低。

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 是如此之快,以至于 timeit 无法测量它。但是 B.C.D 加 2 需要大约 30 倍的时间。

所以,最后,你可以用结构做你想做的事,但有充分的理由不这样做,除非你对点有非常有效的需求。在我展示的方面,备用分隔符效果更好。

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              

使用这些变量中的任何一个,计算速度都一样快。

【讨论】:

  • +1 绩效评估。一个应用程序 OP 可以使用结构在function parameters 中。特别是如果需要其中很多:)
【解决方案2】:

Matlab 已经在 ids 中使用点作为分隔符,特别是在结构及其字段的 ids 中。比如执行

a.b = 3

创建一个名为a 的结构体,其中包含一个名为b 的字段,该字段本身的值为3。阅读有关structures 主题和函数struct 的文档。

【讨论】:

    【解决方案3】:

    不是你想要的方式。正如上面的答案所指出的,点在 ML 语法中具有特殊含义,不能用作标识符本身的一部分。

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 1970-01-01
      • 2020-07-21
      • 2011-01-31
      • 2010-11-29
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多