假设我有一个7*3的矩阵t。
>> t=[2,1,3;5,1,9;4,6,1;1,4,6;7,1,5;1,7,4;9,7,5]
t =
2 1 3
5 1 9
4 6 1
1 4 6
7 1 5
1 7 4
9 7 5
并且有一个含有两个值的数组,如下所示:
e=[2,1]
e =
2 1
我需要知道矩阵e中哪一行的值包含1和2(即矩阵e所代表的向量)。也就是说,给定一个函数match(e,t),它应该返回满足条件的行号。
我已经写了一个能够完成任务的函数match。
function [ faceindex ] = match(e,t)
c=ismember(t,e)
d=sum(c,2)
faceindex=find(d==2)
end
这是它的工作原理:
匹配(e,t)
c =
1 1 0
0 1 0
0 0 1
1 0 0
0 1 0
1 0 0
0 0 0
d =
2
1
1
1
1
1
0
faceindex =
1
答案 =
1
然而,我将其用于相当大的输入,并且调用了多次,运行时间很长。Matlab的分析器显示问题出在ismember函数上。有没有更快的匹配方法?我可以接受任何解决方案或提示。也许有些方法不需要使用ismember进行检查。请注意,顺序并不重要。如果e是2,1...那么该行应该有1和2,并且可以以任何顺序排列。
e
变成[1 2 7]
,那么faceindex=find(d==2)
不会变成faceindex=find(d==3)
吗? - Divakart
的一行有两个1
和没有2
,那么这应该计入faceindex
吗? - Divakar