首页 > 解决方案 > 基于另一列的唯一元素在列中添加元素

问题描述

我有一个矩阵,称为single_matrix_with_time_id,第一列对应frame_number,第二列对应time,第三列identity,第四列error,第五和第六列 ,X and Y coordinates第七列Camera_id

我想要做的是从第二列 ( ) 中获取唯一元素以及与来自time的唯一元素相对应的元素,并将其添加到名为 的新矩阵的第一、第二和第三列中。我尝试在下面显示的代码中执行此操作,但这并没有给我预期的结果。附上代码和图像。任何帮助将不胜感激。timefirst and seventh columnfinal_plot_matrixsingle_matrix_with_time_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

single_matrix_witj_time_id

标签: matlabmatrixindexingrowscolumnsorting

解决方案


看起来您使用“唯一”的方法是正确的,但它应该比这更简单。在时间数据(第二列)上调用 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]);

推荐阅读