我正在尋找一種'較好'的方法來在較大的矩陣(任意數量的維度)中查找矩陣(模式)。在matlab矩陣中查找子矩陣的一般方法
例子:
total = rand(3,4,5);
sub = total(2:3,1:3,3:4);
現在我想這樣的事情發生:
loc = matrixFind(total, sub)
在這種情況下loc
應該成爲[2 1 3]
。
現在我只想找到一個單一點(如果存在)並且不擔心舍入問題。可以假定sub
'適合'total
。
這是我如何能做到這一點的3個維度,但它只是感覺像有一個更好的辦法:
total = rand(3,4,5);
sub = total(2:3,1:3,3:4);
loc = [];
for x = 1:size(total,1)-size(sub,1)+1
for y = 1:size(total,2)-size(sub,2)+1
for z = 1:size(total,3)-size(sub,3)+1
block = total(x:x+size(sub,1)-1,y:y+size(sub,2)-1,z:z+size(sub,3)-1);
if isequal(sub,block)
loc = [x y z]
end
end
end
end
我希望能找到一個任意數量的可行的解決方案尺寸。
不知道這將有助於解決方案,但可以'爲ndims(子)'假定爲等於'爲ndims(總)'? – ojdo
就像一個註釋:對於2D唯一的情況下,Matlab文件交換中函數['findsubmat'](http://www.mathworks.com/matlabcentral/fileexchange/23998-findsubmat)具有相當不錯的實現思想(和代碼註釋)。 – ojdo
與@ojdo第一個問題有點相關:我認爲在'ndim(sub)