将单元格转换为矩阵

时间:2014-05-03 05:27:26

标签: matrix matlab

我有一个单元格数组,我想将它转换为2D

矩阵

我做了以下事情:

B = [9 8 8 8 10 10 10 10 9 9];
A = [8,9,10]; 
Y = arrayfun(@(x) find(B==x),unique(A),'Un',0);

结果是:

Y = {[2,3,4] , [1,10,9] , [5,6,7,8] } 

现在我希望Y像这样:

 Y = 2  3  4  0  0 0 0 0 0 0 
     1  10 9  0  0 0 0 0 0 0 
     5  6  7  8  0 0 0 0 0 0 

一个2D矩阵,其行大小为A,列大小为B,我如何在MATLAB中执行此操作?

2 个答案:

答案 0 :(得分:4)

只需将您的最后一行更改为:

Y = cell2mat(arrayfun(@(x) [find(B==x) 0*find(B~=x)],unique(A),'Uni',0).')

还包括所有未通过条件的值并将它们设置为零。然后,所有单元格都具有相同的大小,您可以使用cell2mat

Y =

     2     3     4     0     0     0     0     0     0     0
     1     9    10     0     0     0     0     0     0     0
     5     6     7     8     0     0     0     0     0     0

答案 1 :(得分:0)

这可能会更快,因为它可以避免cellfun

Y = bsxfun(@eq, unique(A).', B); %'// compare elements from A and B
Y = bsxfun(@times, Y, 1:size(Y,2)); %// transform each 1 into its row index
[~, ind] = sort(~Y, 2); %// this will move zeros to the right
ind = bsxfun(@plus, (ind-1)*size(Y,1), (1:size(Y,1)).'); %'// make linear index
Y = Y(ind);