我需要建立一个索引单元数组。ori
每个单元格包含与以下代码中的唯一值相对应的所有索引:
oriVals = unique(ori);
oriIndicies = cell(numel(oriVals), 1);
for kOri = 1:numel(oriVals)
oriIndicies{kOri} = find(ori == oriVals(kOri));
end
我可以用 MATLAB 的本机函数更紧凑地编写它吗?我只是想确保在我自己写之前没有任何东西。
我需要建立一个索引单元数组。ori
每个单元格包含与以下代码中的唯一值相对应的所有索引:
oriVals = unique(ori);
oriIndicies = cell(numel(oriVals), 1);
for kOri = 1:numel(oriVals)
oriIndicies{kOri} = find(ori == oriVals(kOri));
end
我可以用 MATLAB 的本机函数更紧凑地编写它吗?我只是想确保在我自己写之前没有任何东西。
代替:
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
内存分配的循环慢,因为评估匿名函数很慢。