【问题标题】:applying function to sections of array?将函数应用于数组的各个部分?
【发布时间】:2016-12-30 23:46:17
【问题描述】:

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

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

【问题讨论】:

  • 了解具体功能是什么很重要。除了 Suever 的出色答案之外,根据您想要对每组相等值执行的操作,可能会采用更快的方法。此外,您应该指定数据 [3 3 2 2 2 3 3 4 4] 会发生什么。值 3 应该形成一组还是两组?
  • 是的,你是对的。然而,Suever 提供的通用函数方法正是我所寻找的。不过感谢您的努力! :)

标签: arrays matlab function loops


【解决方案1】:

您可以使用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)});

【讨论】:

  • 嗨。非常感谢你这么详细的回答!这非常有帮助,也是我想要的 :) 新年快乐。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多