我是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'来评估我的标签矩阵然后'='来分配列,但是我得到一条错误消息,因为我的数据矩阵是'双精神'矩阵而不是'单元'矩阵。
感谢您提供的任何帮助
答案 0 :(得分: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
这种方法的优势在于它(在概念单元中)将来自电子表格或其他来源的所有数据保持在一起,并且如果列的名称恰好已存在,则不会意外覆盖工作空间中的变量作为一个变量(或者更糟糕的是,可能是一个函数......)
答案 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