将函数应用于数组的部分?

时间:2016-12-30 23:46:17

标签: arrays matlab function loops

假设我在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等...

对我来说,最简单的方法是什么?

1 个答案:

答案 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)});