2013-04-21 54 views
0

我需要構建索引的單元數組。每個單元包含相應的ori獨特的價值在下面的代碼的所有指標:向量化索引集的構建

oriVals = unique(ori); 
oriIndicies = cell(numel(oriVals), 1); 
for kOri = 1:numel(oriVals) 
    oriIndicies{kOri} = find(ori == oriVals(kOri)); 
end 

我可以這樣寫更緊湊與MATLAB自帶的功能呢?我只是想確保在寫我自己之前沒有任何東西。

回答

1

相反的:

oriIndicies = cell(numel(oriVals), 1); 
for kOri = 1:numel(oriVals) 
    oriIndicies{kOri} = find(ori == oriVals(kOri)); 
end 

你可能會寫:

oriIndicies = arrayfun(@(x) find(ori == x), oriVals, 'UniformOutput', false); 

但要小心,現在oriIndicies是行,而不是列。此外,這肯定比內存分配的for循環要慢,因爲評估匿名函數的速度很慢。

+0

很酷。感謝您的警告。 – Memming 2013-04-21 13:06:03

+1

也許它更緊湊,但它肯定需要更長的時間才能運行。 – 2013-04-21 16:13:31