【问题标题】:MATLAB: Partition vector in multiple parts using begin and end indices [duplicate]MATLAB:使用开始和结束索引在多个部分中划分向量
【发布时间】:2013-09-05 20:43:56
【问题描述】:

我有一个带有数据的1xN 数组,我想从中删除相关部分。 基本上我有两个数组 - beginIndexendIndex - 指示我需要提取哪些数据部分。

示例:

data = 1:10;
beginIndex = [1 5 9];
endIndex = [3 6 10];

想要的结果是

partitionedData = [1 2 3 5 6 9 10] %Indices: 1-3, 5-6, 9-10 

我已经试过了

partitionedData = data(beginIndex:endIndex)

后者给了我等价于

partitionedData = data(beginIndex(1):endIndex(1)) %[1 2 3]

我也试过accumarray,但是聚合函数必须返回标量值。 我真的很感激这里的一些帮助。

谢谢

【问题讨论】:

    标签: matlab data-partitioning


    【解决方案1】:

    像这样:

    >> partitionedData = data(cell2mat(arrayfun(@(s,e) s:e, beginIndex, endIndex, ...
        'uni', 0)))
    partitionedData =
         1     2     3     5     6     9    10
    

    【讨论】:

    • 你比我快 :-( 不要忘记用你的结果索引data
    • 谢谢,忘记索引了。这就是为什么你永远不应该使用 1:10 作为测试输入,如果你使用 10:20,你会直接看到问题。
    【解决方案2】:

    一行:-)

    data(cell2mat(arrayfun(@(x,y) x:y, beginIndex,endIndex,'UniformOutput',false)))
    

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2020-08-20
      相关资源
      最近更新 更多