我有一个大小为MxN的矩阵,其中M很大,N大约是30。
[A,B,C,...,AD] = A(:,1:30)
我问的原因是我想给列一个特定的名称(这里是A,B a,c,...,AD)而不是强制写入:
[A,B,C,...,AD] = deal(A(:,1),A(:,2),A(:,3),...,A(:,30))
答案 0 :(得分:1)
通常最好将所有列放在矩阵中,只需通过列索引访问它们。
无论如何,如果你真的需要将它们分成变量,你可以用num2cell
将矩阵转换为其列的单元格数组,然后生成一个comma-separated list用于右边 - 手的一面。另请注意,在最近的Matlab版本中,您可以remove deal
:
A = magic(3); % example matrix
Ac = num2cell(A, 1);
[c1 c2 c3] = Ac{:}; % or [c1 c2 c3] = deal(Ac{:});
答案 1 :(得分:0)
为了生成字典序列我最近出于无知,写了这个
Data = rand(2,671);
r = rem(size(Data,2),26);
m = floor(size(Data,2)/26);
Alf = char('A'+(0:25)'); %TeX-like char seq
if m == 0
zzz = Alf(1:r);
else
zzz = Alf;
for x = 1:m-1
zzz = char(zzz,[char(Alf(x)*ones(26,1)),Alf]);
end
if r > 0
zzz = char(zzz, [char(Alf(m+1)*ones(r,1)),Alf(1:r)] );
end
end
根据列数生成列名,直到ZZ
。如果在matlab中有一个现成的命令,请告诉我。
你永远不会使用eval
来做这些事情! eval
使用是危险和错误的(但你无法抗拒):
% ==========
% Assign Data to indices
% ==========
for ind = 1:size(Data,2)
eval([zzz(ind,:) '= Data(:,' num2str(ind) ');']);
end
并且您的工作区看起来像一个字母汤。