根据另一列的唯一元素在一列中添加元素
Adding elements in a column based on unique elements of another column
我有一个名为 single_matrix_with_time_id
的矩阵,第一列对应于 frame_number
,第二列对应于 time
,第三列对应于 identity
,第四列对应于error
,第五和第六列 X and Y coordinates
,第七列 Camera_id
。
我想做的是从第二列 (time
) 中取出唯一元素,从 first and seventh column
中取出与 time
的唯一元素相对应的元素和将其添加到名为 final_plot_matrix
的新矩阵的第一、第二和第三列。我试图在下面显示的代码中执行此操作,但它没有给我预期的结果。附上 single_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
看起来您使用 "unique" 的方法是正确的,但它应该比这更简单。对时间数据(第二列)调用 unique 以获取唯一的行号。唯一 returns 个唯一值作为第一个输出,索引作为第二个。我们只关心索引,所以忽略第一个输出。
[~, 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]);
我有一个名为 single_matrix_with_time_id
的矩阵,第一列对应于 frame_number
,第二列对应于 time
,第三列对应于 identity
,第四列对应于error
,第五和第六列 X and Y coordinates
,第七列 Camera_id
。
我想做的是从第二列 (time
) 中取出唯一元素,从 first and seventh column
中取出与 time
的唯一元素相对应的元素和将其添加到名为 final_plot_matrix
的新矩阵的第一、第二和第三列。我试图在下面显示的代码中执行此操作,但它没有给我预期的结果。附上 single_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
看起来您使用 "unique" 的方法是正确的,但它应该比这更简单。对时间数据(第二列)调用 unique 以获取唯一的行号。唯一 returns 个唯一值作为第一个输出,索引作为第二个。我们只关心索引,所以忽略第一个输出。
[~, 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]);