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

问题描述 投票:0回答:1

我有一个叫做single_matrix_with_time_id的矩阵,第一列对应frame_number,第二列对应time,第三列对齐identity,第四列对齐qzxswpoi,第五和第三列用error和第七列用X and Y coordinates

我想要做的是从Camera_id获取第二列(time)中的独特元素和对应于time的独特元素的元素,并将其添加到名为first and seventh column的新矩阵的第一,第二和第三列。我尝试在下面显示的代码中执行此操作,但它没有给我预期的结果。附上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

matlab matrix indexing rows columnsorting
1个回答
1
投票

看起来你使用“独特”走在正确的轨道上,但它应该比这更简单。在时间数据(第二列)上调用唯一以获取唯一的行号。 Unique返回唯一值作为第一个输出,索引作为第二个输出。我们只关心索引,所以忽略第一个输出。

single_matrix_witj_time_id

现在,您可以从原始数据中获知所需的行号和列号。行号在“ia”中,您需要第1,2和7列。因此,创建一个新矩阵:

[~, ia] = unique(single_matrix_with_time_id(:,2);

而已!如果要切换列的顺序(例如,将时间设为第一列而不是第二列),只需切换上一行中列的顺序即可。例如:

final_plot_matrix = single_matrix_with_time_id(ia,[1 2 7]);
© www.soinside.com 2019 - 2024. All rights reserved.