【问题标题】:Dynamic switch in Matlab MAT fileMatlab MAT文件中的动态切换
【发布时间】:2016-12-01 13:54:39
【问题描述】:

我有一个 Matlab mat 文件,它有以下变量:

variable0
variable1
variable2
variable3

是否可以对它们进行动态索引和修改,如下所示:

function setVariable(obj, variableNum, data)
    obj.matFile.(variable0+variableNum) = data;

end

因此,如果有人传递 0,则变量 0 被修改,如果有人传递 3,则变量 3。我知道这段代码不起作用,这只是我尝试过的一些例子。我目前的解决方案是使用 switch 语句。这不像在 C++ 代码中那么好,我正在使用上面的索引。我希望 C++ 和 Matlab 尽可能接近。

回答

我是这样做的,它正在工作:

eval(sprintf('obj.matfile_variable%d = data;', variableNum));

【问题讨论】:

  • 你的意思是sprintf('variable%d',variableNum)吗?
  • 但是如何使用字符串调用mat文件呢?
  • 您的意思是如何使用字符串将mat文件加载到Matlab对象中?如果是这样,您需要 matfile(filename) 函数来创建一个 matfile 对象。老实说,我认为它不会只在一条线上起作用。您可能还需要一些数据检查。

标签: matlab


【解决方案1】:
function setVariable(obj, variableNum, data)
    % check if variableNum is numeric
    if isnumeric(variableNum)
        variableNum = num2str(variableNum);
        varName = strcat('variable',variableNum); 
    else
        varName = strcat('variable',variableNum);
    end

    obj.matFile.(varName) = data;


end

这应该可以解决问题。

【讨论】:

  • 我知道这很简单,但我想提一下。 num2str 实际上检查字符串类型的第一个输入参数并直接返回它。所以你不需要if...else... 语句。只需进行转换和字符串连接即可。
【解决方案2】:

如何使用

obj.matFile(variableNum).data = data;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 2020-11-10
    • 1970-01-01
    • 2012-07-17
    • 2015-05-19
    • 1970-01-01
    • 2015-06-11
    • 2015-04-13
    相关资源
    最近更新 更多