11

我需要将实验数据加载到scicoslab中,这是一个scilab的(设计非常糟糕的)克隆分支,恰好支持图形建模。网络上的文档很差,但它与scilaboctave相当相似。

我需要处理的数据包含在一定数量的文本文件中:Data_005, Data_010, ..., Data_100. 它们中的每一个都可以使用命令的-ascii标志加载loadmatfile

问题来自于loadmatfile("foo", "-ascii")将文件加载foo.mat到名为foo. 为了循环使用数据文件,我需要执行以下操作:

for i = [5:5:100]
    name = sprintf("Data_%02d", i);
    loadmatfile(name, "-ascii");
    x = read_var_from_name(name);
    do_something(x);
end

我搜索的是一个内置函数read_var_from_name,它允许我通过字符串访问内部符号表。

不知道有没有类似的功能?

笔记:

  1. 如果您的文件是ascii格式,则无法覆盖此行为;
  2. 在这个阶段,我也可以使用 octave(不涉及图形建模),尽管它的行为方式相同。
4

3 回答 3

11
>> foo = 3.14; name = 'foo'; eval(name)

foo =

    3.1400

以上在 MATLAB 中工作,Scilab 的文档说它也有一个eval功能。不过,不确定我是否理解正确。

于 2012-04-02T11:54:02.070 回答
9

@arne.b 有一个很好的答案。

在您的情况下,您也可以在 matlab 中执行此操作:

a=load('filename.mat')
x=a.('variable_name')
于 2012-04-02T12:17:29.110 回答
0

让我们一一讨论您的观点:

  1. “ScicosLab,Scilab 的(设计非常糟糕的)克隆” 在我看来,这是一种不准确的软件介绍方式。ScicosLab 不是 Scilab 的克隆,而是它的一个分支。ScicosLab (INRIA) 背后的团队是制作 scocos(现在在 Scilab 开发线中称为 xcos)的团队。在某个时候(从 Scilab v4),Scilab 团队决定从 Tcl/tk 转向 Java,但 SciccosLab/scicos 团队离开了,继续使用该语言 (Tcl) 和它的图形用户界面设计包 (tk)。让 ScocosLab 社区相信整个 Scilab 文档和支持总体上不是很好。:) (更多关于 Scilab 和叉子的信息
  2. 关于技术问题,我不确定您要在这里实现什么,Scilab/ScicosLab 仍然具有eval基本上可以满足您需求的功能。然而,这个函数将被弃用,取而代之的是evstr. 还有execstr值得研究的功能。
  3. loadmatfile我了解,“尝试”将 MATLAB.mat文件(MATLAB 专有的表格格式)中定义的变量加载到 Scilab 工作区中。例如,如果有一个变量foo,它将“尝试”创建变量foo并从 MATLAB 脚本加载其值。检查这个例子。我会x(i) = foo在 for 循环中创建一个变量。再次,您的问题并不完全清楚。
  4. 作为旁注,也许您可​​以考虑将数据导出为 CSV 而不是.mat文件。
于 2019-03-11T13:00:53.830 回答