Matlab 基于另一列的唯一元素在列中添加元素

Matlab 基于另一列的唯一元素在列中添加元素,matlab,matrix,indexing,rows,columnsorting,Matlab,Matrix,Indexing,Rows,Columnsorting,我有一个称为single_matrix_的矩阵,它具有_time_id,第一列对应于帧_编号,第二列对应于时间,第三列具有标识,第四列具有错误,第五列和第六列具有X和Y坐标,第七列具有相机_id 我想做的是从第二列时间中提取唯一元素,从第一列和第七列中提取与唯一时间元素对应的元素,并将其添加到新矩阵的第一列、第二列和第三列,称为final_plot_matrix。我试着在下面的代码中这样做,但它并没有给我预期的结果。附有带有时间id的单个矩阵的代码和图像。任何帮助都将不胜感激 final_plo

我有一个称为single_matrix_的矩阵,它具有_time_id,第一列对应于帧_编号,第二列对应于时间,第三列具有标识,第四列具有错误,第五列和第六列具有X和Y坐标,第七列具有相机_id

我想做的是从第二列时间中提取唯一元素,从第一列和第七列中提取与唯一时间元素对应的元素,并将其添加到新矩阵的第一列、第二列和第三列,称为final_plot_matrix。我试着在下面的代码中这样做,但它并没有给我预期的结果。附有带有时间id的单个矩阵的代码和图像。任何帮助都将不胜感激

final_plot_matrix = nan(length(unique(single_matrix_with_time_id(:,2)))+1,length(final_filtered_ant_id)+3);
final_plot_matrix(1,4:length(final_filtered_ant_id)+3) = 
final_filtered_ant_id;
final_plot_matrix = repelem(final_plot_matrix,1,2);
final_plot_matrix(:,1) = [];
final_plot_matrix(:,2) = [];
final_plot_matrix(:,3) = [];
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,3) = unique(single_matrix_with_time_id(:,2));
[C,ia,ic] = unique(single_matrix_with_time_id(:,2));
frame_number = ia(single_matrix_with_time_id(:,1));
Camera_id = ia(single_matrix_with_time_id(:,3))
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,2) = frame_number
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,1) = Camera_id

看起来您使用unique的方法是正确的,但它应该更简单。在时间数据第二列上调用unique以获取唯一的行号。Unique返回唯一值作为第一个输出,索引作为第二个输出。我们只关心指数,所以忽略第一个输出

[~, ia] = unique(single_matrix_with_time_id(:,2);
现在,您可以从原始数据中了解所需的行号和列号。行号在ia中,您需要列1、2和7。因此,创建一个新的矩阵:

final_plot_matrix = single_matrix_with_time_id(ia,[1 2 7]);
就这样!例如,如果要切换列的顺序,要使时间成为第一列而不是第二列,只需切换上一行中列的顺序即可。例如:

final_plot_matrix = single_matrix_with_time_id(ia,[2 1 7]);

我认为应该找到每个唯一列的索引,使用交集合并所有列indexes@user3452134我不明白。