如何在Matlab中将单元格内容重新排列成单个矩阵

时间:2016-09-01 14:22:01

标签: matlab matrix indexing cell-array

假设我有一个名为data的单元格,其中包含三个元素。每个单元元素包含(n×2)矩阵。 data中每个单元格的第一列是其旁边数据的ID,而第二列是实际数据。请注意,我正在使用的实际data不是rand个数字,而是实际的具体数字。

data = cell(1,3);

data{1} = [1 rand ;
           2 rand ;
           3 rand ;
           4 rand];

data{2} = [2 rand ;
           3 rand ;
           4 rand ;
           5 rand ;
           6 rand];

data{3} = [2 rand ;
           5 rand ;
           6 rand ;
           7 rand ;
           8 rand ;
           9 rand];

我想将data的内容重新排列到名为rearrange的矩阵中,如下所示。如您所见,ID 1仅存在于data{1}中,因此在rand的第一行的第三和第四列中,rearrange被视为零。如您所见,ID 9仅存在于data{3}中,因此randrearrange的第九和第三列中的rearrange = [1 rand 0 0 ; 2 rand rand rand ; 3 rand rand 0 ; 4 rand rand 0 ; 5 rand rand rand ; 6 0 rand rand ; 7 0 0 0 ; 8 0 0 rand ; 9 0 0 rand]; 被视为零。

1:9

在这种情况下,唯一ID为1:9,但我想自动化唯一ID列表,而不是仅仅说{{1}}。

2 个答案:

答案 0 :(得分:1)

你可以使用for循环:

for i = 1: length(data)
    rearrange(data{i}(:,1),i+1) = data{i}(:,2);
end
rearrange(:,1) = 1:size(rearrange,1);

答案 1 :(得分:1)

这可以很容易地使用for循环完成:

CellData = data; 
for n = 1:length(CellData) %loop through each cell
    indices = CellData{n}(:,1); %extract indices
    values = CellData{n}(:,2); % extract values
    Matrix(indices, n) = values; %assign values to correct location
end
% add the first column in
sMatrix = size(Matrix);
counter = 1:sMatrix(1);
finalMatrix = [counter' Matrix];