MATLAB - 需要将Matrix拆分为列变量,其名称来源于另一个矩阵吗?

时间:2012-07-10 20:12:33

标签: matlab

我是Matlab的新手,我遇到了一些麻烦。

我有两个通过导入数据获得的矩阵,它们是'label'(文本的单元格矩阵)和'data'(双精度矩阵?)。我需要能够创建与每列相关的变量,以允许它们单独绘制并用于计算。应使用标签矩阵中的文本自动命名这些变量。我不能使用textread,因为这些matices的大小因源数据而异

以下是我的问题的一个例子

数据=

    1  2  3  4

    5  6  7  8

    9 10 11 12

label = A B C D

我需要一些代码来使Matlab自动创建变量,如下所示

A =
 1

5

9

B =

2

6

10

我尝试使用'eval'来评估我的标签矩阵然后'='来分配列,但是我得到一条错误消息,因为我的数据矩阵是'双精神'矩阵而不是'单元'矩阵。

感谢您提供的任何帮助

3 个答案:

答案 0 :(得分:2)

我建议dynamic field names

Data= [1 2 3 4;
       5 6 7 8; 
       9 10 11 12];
Label={'A','B','C','D'};

for iter=1:length(Label)
    DataStruct.(Label{iter})=Data(:,iter);
                ___________<--- field name created automatically
end

>> DataStruct

DataStruct = 

    A: [3x1 double]
    B: [3x1 double]
    C: [3x1 double]
    D: [3x1 double]

>> DataStruct.A

ans =

     1
     5
     9

这种方法的优势在于它(在概念单元中)将来自电子表格或其他来源的所有数据保持在一起,并且如果列的名称恰好已存在,则不会意外覆盖工作空间中的变量作为一个变量(或者更糟糕的是,可能是一个函数......)

答案 1 :(得分:0)

我确实同意这是一个棘手的任务....这是解决方案

    Data=[1 2 3 4; 5 6 7 8; 9 10 11 12]; % A matrix
label=['A', 'B', 'C', 'D']; % its a cell array
for i=1:numel(label)
    v=genvarname(label(i)); %  Generating the variable names
    eval([v ' = Data(i,:)']); % Assinging values into named variables 
end

答案 2 :(得分:0)

Hasan的代码运行良好,但“label”必须是单元格数组,而不是矢量,因此您必须编写label = {'A','B','C','D'}和标签{i} 。如果你想要4列写数据(:,i)。

Data=[1 2 3 4; 5 6 7 8; 9 10 11 12]; % A matrix
label={'A', 'B', 'C', 'D'}; % its a cell array
for i=1:numel(label)
    v=genvarname(label{i}); %  Generating the variable names
    eval([v ' = Data(:,i)']); % Assinging values into named variables 
end