0

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

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

我可以用 MATLAB 的本机函数更紧凑地编写它吗?我只是想确保在我自己写之前没有任何东西。

4

1 回答 1

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内存分配的循环慢,因为评估匿名函数很慢。

于 2013-04-21T13:04:33.343 回答