0

在 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

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

4

3 回答 3

2

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

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)

如果您真的需要单独的矩阵,一种选择是使用动态字段名创建一个结构。例子:

matrix_name_list={'name1' 'name2' 'name3'};
lasti = length(matrix_name_list);
for i = 1:lasti
    data.(matrix_name_list{i}) = M{i};
end
于 2013-09-09T20:20:31.907 回答
1

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

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
于 2013-09-09T20:29:34.040 回答
0

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
于 2013-09-09T23:01:08.347 回答