如何在 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}
中,所以rand
在rearrange
中第一行的第三列和第四列被认为是零。可以看到,ID9
只存在于data{3}
中,所以rand
在rearrange
中第九行第二列和第三列被认为是零。
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];
假设我有一个名为 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}
中,所以rand
在rearrange
中第一行的第三列和第四列被认为是零。可以看到,ID9
只存在于data{3}
中,所以rand
在rearrange
中第九行第二列和第三列被认为是零。
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];