【问题标题】:How to change name of matrix receiving data on each loop如何更改每个循环上接收数据的矩阵名称
【发布时间】:2013-09-09 20:12:12
【问题描述】:

在 MATLAB 中,我得到了一个元胞数组 M,其中包含很多好东西,我需要将它们放入许多不同命名的矩阵中。我需要做这样的事情:

matrix_name_list={'name1' 'name2' 'name3'};
lasti=length(matrix_name_list);
for i=1:lasti
    matrix_name=matrix_name_list{i};
    matrix_name=M{i};
end

即我需要更改每个循环中接收数据的矩阵的名称。有什么办法可以做到吗?

【问题讨论】:

  • 有办法做到这一点,但通常这意味着有更好的方法来解决您的问题。您不能将结果存储在单元阵列中吗?还是在结构中?
  • 请缩进你的循环。

标签: matlab


【解决方案1】:

如果您的数据在每次迭代中的大小都相同,那么您最好使用一个带有额外维度的大矩阵。这比处理许多名称略有不同的矩阵要容易得多。试试这样的:

n = length(M);
matrix = zeros(length(M{i}), n);
for i = 1:n
    matrix(:,i) = M{i};
end

% now get data for iteration 4
matrix(:,4)

如果您真的需要单独的矩阵,一种选择是使用dynamic fieldnames 创建一个结构。示例:

matrix_name_list={'name1' 'name2' 'name3'};
lasti = length(matrix_name_list);
for i = 1:lasti
    data.(matrix_name_list{i}) = M{i};
end

【讨论】:

    【解决方案2】:

    这不是我最喜欢做的事情。正如人们所建议的那样,最好使用单元格数组或多维数组。但是,如果你真的准备好了,你可以这样做:

    M = {1, 2, 3};
    matrix_name_list={'name1' 'name2' 'name3'};
    lasti=length(matrix_name_list);
    for i=1:lasti
        eval([matrix_name_list{i} '=M{i}']);
    end
    

    【讨论】:

      【解决方案3】:

      assignin 就是这样做的方法。

      matrix_name_list={'name1' 'name2' 'name3'};
      lasti=length(matrix_name_list);
      for i=1:lasti
          matrix_name=matrix_name_list{i};
          assignin('caller',matrix_name,M{i});
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 2021-07-21
        • 2011-01-18
        相关资源
        最近更新 更多