提取Matrix列并将其存储在各个向量中

时间:2016-06-20 10:39:54

标签: matlab matrix extract

我有一个大小为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))

2 个答案:

答案 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

并且您的工作区看起来像一个字母汤。