【问题标题】:Adding elements in a column based on unique elements of another column根据另一列的唯一元素在列中添加元素
【发布时间】:2019-02-13 16:25:53
【问题描述】:

我有一个名为single_matrix_with_time_id的矩阵,第一列对应frame_number,第二列对应time,第三列对应identity,第四列对应error,第五和第六列对应@ 987654328@ 和第七列带有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

【问题讨论】:

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

标签: matlab matrix indexing rows columnsorting


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多