matrix - 从矩阵中删除不匹配的元素
问题描述
我正在尝试比较两个矩阵A
和B
. 如果前两列中的元素与 中的元素A
匹配B
,我想从 中删除所有不匹配的行A
。中的第三列B
不应考虑比较。
A = [1 2 3 B = [1 2 8
3 4 5 3 4 5]
6 7 8]
期望的结果:
A = [1 2 3
3 4 5]
到目前为止,我只找到了删除重复条目的方法,这与我想要的完全相反。我怎样才能做到这一点?
解决方案
您可以有效地ismember
用于此任务:
% Input matrices
A = [1 2 3; 3 4 5; 7 8 9];
B = [1 2 8; 3 4 5];
A1 = A(:,1:2); % Extract first two columns for both matrices
B1 = B(:,1:2);
[~,ii] = ismember(A1,B1,'rows'); % Returns which rows in A1 are also in B1
ii = ii(ii>0); % Where ii is zero, it's a non-matching row
A(ii,:) % Index to keep only matching rows
所有这些都可以写得更紧凑,但我想先展示一步一步的过程:
[~,ii] = ismember(A(:,1:2),B(:,1:2),'rows');
A(ii(ii>0),:)
推荐阅读
- html - Blogger 博客存档显示在移动屏幕上的一半页面上
- javascript - 当我点击Javascript中的按钮时如何切换多个图像
- javascript - 使用 node.js 以表单形式上传图片
- jenkins - 使用 Jenkins 和 Generic-Artifactory 集成时如何指定版本号?
- android - 刷新活动一定次数
- mysql-workbench - Mysql 以“ok”响应,未在“Result Grid”中获得输出
- c# - 如何在 Unity 中应用缓动算法?
- linux - 如何在shell脚本的while循环中优化从大文件中读取
- corda - 两个节点可以有不同的合约版本但相同的流程吗?
- javascript - 当我在其他列中选择一些值时如何验证文本框