matlab - 基于另一列的唯一元素在列中添加元素
问题描述
我有一个矩阵,称为single_matrix_with_time_id
,第一列对应frame_number
,第二列对应time
,第三列identity
,第四列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
解决方案
看起来您使用“唯一”的方法是正确的,但它应该比这更简单。在时间数据(第二列)上调用 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]);
推荐阅读
- python - Pandas 中寻找 ID 和旧日期的更快循环
- node.js - Ctrl+C 服务器后运行 npm postscript
- angular - 带有 Angular 8 和 Springboot 2 的 JWT:JWT 字符串必须恰好包含 2 个句点字符
- python - AttributeError 模块 'tensorflow' 在 python 3.7.6 MacOS 中没有属性
- java - 如何在android中用Canvas在一条线的尖端画一个圆圈
- c++ - 单例类不能处理多个文件
- flutter - Flutter Navigator 从替换的路由中获取数据
- http - 为什么我尝试发送 POST 请求时出现错误?
- asp.net - 为什么在.NETCORE 3.1,用Autofac,属性注册是不允许的
- python - 在gridlayout kivy中定位gridlayout