gpt4 book ai didi

performance - 如何删除矩阵 A 的那些行,这些行在 Matlab 的指定列中与矩阵 B 具有相等的值?

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:43 29 4
gpt4 key购买 nike

我在 Matlab A 和 B 中有两个矩阵,它们的列数相同但行数不同。 B中的行数也小于A中的行数,B实际上是A的子集。

如果 A 的第 1 列和第 2 列中的值等于矩阵 B 的第 1 列和第 2 列中的值,我如何才能有效地从 A 中删除这些行?

目前我正在这样做:

for k = 1:size(B, 1)
A(find((A(:,1) == B(k,1) & A(:,2) == B(k,2))), :) = [];
end

Matlab 提示说这是低效的,我应该尝试使用 any,但我不确定如何使用 any。有人可以帮我解决这个问题吗? =)

我试过了,但是没用:

A(any(A(:,1) == B(:,1) & A(:,2) == B(:,2), 2), :) = [];

它提示如下:

Error using  == 
Matrix dimensions must agree.

我想要的例子:

enter image description here

enter image description here

结果中的 A-B 表示 B 的行从 A 中删除。A-C 也是如此。

最佳答案

尝试使用 setdiff .例如:

c=setdiff(a,b,'rows')

注意,如果顺序很重要,请使用:

c = setdiff(a,b,'rows','stable')

编辑:阅读编辑过的问题和对这个答案的评论,你寻找的setdiff的具体用法是(正如Shai所注意到的):

[temp c] = setdiff(a(:,1:2),b(:,1:2),'rows','stable')
c = a(c,:)

备选方案:

你可以只使用ismember :

a(~ismember(a(:,1:2),b(:,1:2),'rows'),:)

关于performance - 如何删除矩阵 A 的那些行,这些行在 Matlab 的指定列中与矩阵 B 具有相等的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299982/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com