2013-04-21 56 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