按顺序从矢量中随机选择子集(Matlab)

时间:2016-11-18 09:10:11

标签: matlab vector subset

我想选择一个矢量的随机子集,很像datasample(data,k),但我想按顺序排列它们。

我有一个ODE,其输出为[t,y],而我想要的是y的子集。我不能只做一个sort因为y不是线性的,所以我不得不对t进行排序。

我有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这可以使用randpermintersect

的组合来解决
function q40673112
% Create a vector:
v = round(sin(0:0.6:6),3); disp(['v = ' mat2str(v)]);
% Set the size of sample we want:
N = 5;                
% Create the random indices:
inds = intersect(1:numel(v), randperm(numel(v),N)); disp(['inds = ' mat2str(inds)]);
% Sample from the vector:
v_samp = v(inds); disp(['v_samp = ' mat2str(v_samp)]);

示例输出:

%    1    2    3     4     5     6      7      8      9      10     11
v = [0 0.565 0.932 0.974 0.675 0.141 -0.443 -0.872 -0.996 -0.773 -0.279]
inds = [4 6 9 10 11]
v_samp = [0.974 0.141 -0.996 -0.773 -0.279]

答案 1 :(得分:2)

如果我理解正确,您希望对维持其原始订单的元素进行采样。你可以这样做:

  1. 随机抽样指数而非价值;
  2. 对抽样指数进行排序;
  3. 使用它们来访问所选值;
  4. 即:

    result = data(sort(randsample(numel(data), k)));
    

    以上使用统计工具箱中的randsample函数。或者,在最近的Matlab版本中,您可以使用randperm的双输入形式:

    result = data(sort(randperm(numel(data), k)));
    

    例如,给定

    data = [61 52 43 34 25 16];
    k = 4;
    

    可能的结果是

    result =
        61    43    34    25