【问题标题】:How can I rename a group of variables in a loop in MATLAB?如何在 MATLAB 的循环中重命名一组变量?
【发布时间】:2012-05-28 11:22:07
【问题描述】:

我已将一个填充有数据的矩阵X 及其每列的相应标题导入 MATLAB。现在的问题是如何通过标题单元格中的相应名称重命名X 的每一列。
我想循环执行此操作。
谁能告诉我在这种情况下如何循环重命名程序?

【问题讨论】:

  • 你能举个例子吗?听起来 eval() 可以做你需要的,但可能有更清洁的方法
  • 嗨,我用这个代码:[X,header,~] = xlsread('eaef21.xls',1,'A1:AY541');然后我在单元格“标题”中有标题,矩阵“X”中有所有数据,X 的每一列都是一个数据集。

标签: excel matlab


【解决方案1】:

我建议从数据中创建structure,而不是单个变量。即使有大量列,这也不会使工作区混乱,也不会在名称冲突的情况下覆盖工作区中已经存在的变量。它将电子表格中的所有数据保存在一起,并且仍然允许通过列名访问它。要从列名元胞数组和数据矩阵轻松创建结构,请使用cell2struct

>> colnames = {'odds','evens'};
>> data = [1 2;3 4;5 6];
>> spreadsheet_structure = cell2struct(num2cell(data,1), colnames, 2)

spreadsheet_structure = 

     odds: [3x1 double]
    evens: [3x1 double]

num2cell(M,1) 创建一个元胞数组,其中每个元胞都是矩阵M 中的一列)

【讨论】:

    【解决方案2】:

    遍历标题列并使用 eval 创建变量,其名称包含在矩阵“标题”中的字符串中:

      [X,header,~] = xlsread('eaef21.xls',1,'A1:AY541');
      for H = 1:size(header,2)
         eval([header(1,H), " = X(:,", H, ");"]);
      end
    

    此外,将上面的eval 替换为disp 通常非常有用,直到您对它的工作方式感到满意为止。使用disp 也将帮助您了解正在发生的事情。

    【讨论】:

    • 嗨,谢谢,但 MATLAB 报告: eval(header(1,H) + " = X(:," + H + ");"); |错误:输入字符在 MATLAB 语句或表达式中无效。
    • 您是否先用 disp() 而不是 eval() 尝试过?使用 disp 调试 eval 语句。 header(1,1) 的输出是什么?
    • 再试一次。出现语法错误,我使用的是 C# 字符串连接语法。感谢 EitanT 的编辑。
    猜你喜欢
    • 2021-12-31
    • 2013-04-10
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2014-06-17
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多