【问题标题】:Load definitions in a .m file into GNU Octave workspace将 .m 文件中的定义加载到 GNU Octave 工作区
【发布时间】:2020-04-13 16:25:05
【问题描述】:

我编写了一个.m 文件,其中定义了许多矩阵。现在,我想添加其中的一些,并进行一些其他操作。 现在我可以在文件本身中编写这些操作并在 octave-cli 中运行它以查看结果,但我想加载定义,并在 octave GUI 的输入字段中一一进行操作(类似于可以在数学笔记本中完成),但我不想再次在 octave gui 中手动输入所有行。如何将行加载到 octave 的工作区?

例如,假设somedefinitions.m的内容是

function somedefinitions()
c = 4;
d = 5;

现在我希望将其加载到 octave gui,并希望在输入字段中评估 c+d、c*d 等(但我不想在 octave-gui 中手动编写 c 和 d 的定义)。

如何做到这一点?我试过load somedefinitions.m 但这说它无法确定文件格式。

【问题讨论】:

  • 您无法加载somedefinitions,因为它不是数据。如果您调用文件somedefinitions.m 但不使其成为函数,则可以在主代码中调用somedefinitions。这将执行somedefinitions.m 中的所有内容并将其加载到工作空间中。然后你可以在命令窗口中做任何你想做的事情。你现在不能这样做,因为函数有自己的工作空间,所以即使你不这样做,变量也会在somedefinitions 中定义,但在完成后会被删除。简而言之,删除示例的第一行,然后调用该脚本。
  • 当我在 gui 中运行 load(somedefinitions.m) 时,它会显示 error: invalid call to script /path/to/somedefinitions.m
  • 你不能加载它,因为它不是数据。你只需输入somedefinitions,它就会执行脚本,正如我在之前的评论中所说的那样。
  • 有效。谢谢。请以答案的形式发表您的意见,我会接受。

标签: octave


【解决方案1】:

您无法加载somedefinitions,因为它不是数据。如果您调用文件somedefinitions.m 但不使其成为函数,那么您可以在主代码中调用somedefinitions。这将执行somedefinitions.m 中的所有内容并将其加载到工作区中。然后你可以在命令窗口中做任何你想做的事情。你现在不能这样做,因为函数有自己的工作空间,所以即使你不尝试它,变量也会在somedefinitions 中定义,但在完成时会被删除。简而言之,删除示例的第一行,然后调用该脚本。

【讨论】:

    【解决方案2】:

    只是添加另一种以您最初预期的方式使用load的方式:

    saveload 命令可用于存储工作区的状态。

    例如,如果您在工作区中定义了变量:

    >> c = 4
    c =  4
    
    >> d = 5
    d =  5
    

    您可以使用 save 命令保存这两个变量:

    >> save myvariables.mat
    

    这会将cd 保存到提到的文件中。稍后可以使用load 将它们检索回工作区。例如:

    清除工作区并验证它是空的:

    >> clear
    >> whos
    

    重新加载保存的变量:

    >> load myvariables.mat
    >> whos
    Variables in the current scope:
    
       Attr Name        Size                     Bytes  Class
       ==== ====        ====                     =====  =====
            c           1x1                          8  double
            d           1x1                          8  double
    

    在此之后,您可以对变量执行任何您想要的操作。

    上面安德的方法也可以。在这种情况下,您将保存一个脚本文件(不是函数),它只是保存在 m 文件中的命令列表,然后 Octave 可以从命令行执行。他的方法的优点是很容易修改变量的创建,并且保留了它们的创建方法。如果工作空间包含需要大量时间的复杂计算的输出,那么保存工作空间可能是一种节省时间的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多