2014-05-03 147 views
1

我已經單元的陣列我希望它被轉換成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 

有尺寸爲A的行和尺寸爲B的列的2D矩陣,我如何在MATLAB中做到這一點?

+2

我假定'[1,10,9]'是一個錯字 - >它返回'[1,9,10]' ,對嗎? – thewaywewalk

回答

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 
+0

謝謝你完美的工作:) – TravellingSalesWoman

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);