【问题标题】:How can I rename variables from a saved workspace?如何从保存的工作区重命名变量?
【发布时间】:2017-12-30 13:12:07
【问题描述】:

如何以不同的名称加载包含在 MAT 文件中的变量“var”?

我有一些 MAT 文件,其中包含一个变量,其名称始终相同,但值当然不同。我想通过循环加载它们而不在每次迭代中重写它们,所以我需要在加载它们之前更改它们的名称。这可能吗?

在保存的工作区中重命名变量然后加载它也是一种解决方案。这种其他策略是否可行?

【问题讨论】:

  • 那么你会为每个循环重命名所有变量('var')吗? var_1, var_2, var_3 等等……所以你以后可以重用这些变量?
  • 是的!这个想法是不要在第二次迭代中重写第一次迭代中加载的变量(它们都具有相同的名称)
  • 好吧,我认为这不是一个好习惯,但是您可以使用 eval 来设置每个变量名称,就像我上面提到的那样,基于您的迭代。就像当 i=1 时,你会做 eval(['var_',num2str(i),'=var']);因为所有变量都代表相同的东西,所以我会考虑将它们连接起来或创建一个单元格,就像下面提到的@gnovice 一样。

标签: matlab variables mat-file


【解决方案1】:

我建议您将加载的数据存储在某种形式的数组中(numericcell 或 @ 987654323@)。这通常会使组织和处理数据变得更加容易。下面是一个将数据加载到结构体数组中的示例,使用 3 个 MAT 文件,每个文件存储具有不同值(1、2 和 3)的变量 var

fileNames = {'file1.mat'; 'file2.mat'; 'file3.mat'};
for iFile = 1:numel(fileNames)
  structArray(iFile) = load(fileNames{iFile}, 'var');
end

structArray 将是一个结构元素数组,其中包含字段var 中的数据:

>> structArray

structArray = 
  1×3 struct array with fields:
    var

现在,您可以提取字段值并将它们放入数字数组中,如下所示:

>> numArray = [structArray.var]

numArray =
     1     2     3

或者,如果它们的大小或数据类型不同,则将它们放在一个元胞数组中:

>> cellArray = {structArray.var}

cellArray =
  1×3 cell array
    [1]    [2]    [3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多