矢量化索引集建筑

时间:2013-04-21 12:56:54

标签: matlab vectorization

我需要构建索引的单元格数组。每个单元格包含与以下代码中的唯一值ori对应的所有索引:

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

我可以用MATLAB的原生函数更紧凑地编写吗?在我自己编写之前,我只想确保没有任何内容。

1 个答案:

答案 0 :(得分: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循环慢,因为评估匿名函数的速度很慢。