0

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

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

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

数据 =

    1  2  3  4

    5  6  7  8

    9 10 11 12

标签 = ABCD

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

A =
1

5

9

乙 =

2

6

10

等等

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

谢谢你的尽心帮助

4

3 回答 3

2

我推荐动态字段名称

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

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

于 2012-07-10T20:44:41.503 回答
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
于 2012-07-12T14:36:51.440 回答
0

Hasan 的代码运行良好,但“label”必须是元胞数组而不是向量,因此您必须编写 label={'A', 'B', 'C', 'D'} 和 label{i}。如果您想要 4 列,请写入 Data(:,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
于 2015-03-28T12:01:46.513 回答