我是Matlab的新手,遇到了一些麻烦。
我有两种通过导入数据获得的矩阵,分别是"标签"(文本的单元格矩阵)和"数据"(双精度矩阵?)。我需要能够创建与每一列相关的变量,以允许将它们分别绘制并用于计算中。这些变量应使用标签矩阵中的文本自动命名。我无法使用textread,因为这些主题的大小取决于源数据
以下是我的问题的示例
数据=
1 2 3 4
5 6 7 8
9 10 11 12
标签= A B C D
我需要一些代码来使Matlab自动创建变量,如下所示
A =
1个
5
9
B =
2
6
10
等等
我尝试使用'eval'评估标签矩阵,然后使用'='分配列,但是由于我的数据矩阵是'doubles'矩阵而不是'cell'矩阵,因此收到错误消息。
谢谢你的尽心帮助
我建议使用动态字段名称:
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);
___________
end
>> DataStruct
DataStruct =
A: [3x1 double]
B: [3x1 double]
C: [3x1 double]
D: [3x1 double]
>> DataStruct.A
ans =
1
5
9
这种方法的优势在于,它将来自电子表格或其他来源的所有数据保持在一起(以概念为单位),并且如果列名恰好已作为变量存在,则不会意外覆盖工作空间中的变量。 (或更糟糕的是,可能是一个函数...)
Hasan的代码效果很好,但是"标签"必须是单元格数组而不是向量,因此您必须编写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
我同意这是一项棘手的任务...这是解决方案
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