如果A
是一系列點的二維座標,例如:用於陣列「ismember」功能有效的替代 - MATLAB
>> A = [1 2; 3 4; 5 6; 7 8; 9 0];
A =
1 2
3 4
5 6
7 8
9 0
和B
包含兩個小區,其中每個小區是「A」的一部分而只是x
值(第一列)表示,意思是:
>> B = {[3; 7];[5]}
B =
[2x1 double]
[ 5 ]
我要尋找一個解決方案,B
細胞搜索到A
和給那些點的座標。
這是我的代碼這是一個大的數據集的速度很慢:
C = cell (length(B) ,1)
for i = 1 : length(B)
C{i} = A(ismember(A(:,1),B{i},'rows'),:);
end
C
是正確的答案,包括2個細胞,其是B
每個單元的座標:
C =
[2x2 double]
[1x2 double]
>> C{1}
ans =
3 4
7 8
和
>> C{2}
ans =
5 6
此外,儘管C
是正確的答案,我正在尋找更有效的解決方案。可能cellfun
?
第二種方法看起來不錯。謝謝budy – Iman 2014-11-04 15:21:03
@Iman Awesomeness!您可以收集的任何運行時比較結果? – Divakar 2014-11-04 15:22:10
我今天在我的代碼中優化了很多東西,然後有點難以單獨說出這個函數對這樣的真實數據(> 200萬個點!)的影響。 但是,我運行上面的'A'和'B',它表明你的第二種方法比我的速度快72.5%。做得好! – Iman 2014-11-04 20:19:11