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

How to rearrange cell contents into a single matrix in Matlab

假设我有一个名为 data 的单元格,其中包含三个元素。每个单元格元素包含一个 (n x 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 的矩阵中,如下所示。可以看到,ID1只存在于data{1}中,所以randrearrange中第一行的第三列和第四列被认为是零。可以看到,ID9只存在于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];

在这种情况下,唯一 ID 是 1:9,但我想自动生成唯一 ID 列表,而不是仅仅说 1:9

你可以使用for循环:

for i = 1: length(data)
    rearrange(data{i}(:,1),i+1) = data{i}(:,2);
end
rearrange(:,1) = 1:size(rearrange,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];