假设我在MATLAB中有一个名为temp的数组:
40.2000
40.2000
40.2000
39.2000
39.2000
39.2000
38.5000
38.5000
38.5000
38.5000
38.5000
39.4000
42.7000
42.7000
42.7000
42.7000
42.7000
44.1000
44.1000
44.1000
我想在具有相同值的时候仅对此数组的某些部分应用某些函数,因此将函数应用于元素1:3,然后将其应用于4:6等...
对我来说,最简单的方法是什么?
答案 0 :(得分:3)
您可以使用accumarray
对唯一值组执行操作。首先,我们可以使用unique
为我们执行分组到唯一值,结果是一个索引数组,输入的大小,其中每个元素包含一个索引,指示它属于哪个唯一组。然后我们可以将其提供给accumarray
,它将接受一组值并在此数组上执行所需的选项。在下面的示例中,我假设您有一个名为your_operation.m
的函数,它将数组作为输入并生成标量。
[~, ~, b] = unique(data, 'stable');
% Now perform your operation on each group
results = accumarray(b, data, [], @(x)your_operation(x));
如果您需要从函数返回一个数组,您需要将调用包装到your_operation
中的{}
以使其成为单元格数组
results = accumarray(b, data, [], @(x){your_operation(x)});