我想选择一个矢量的随机子集,很像datasample(data,k)
,但我想按顺序排列它们。
我有一个ODE,其输出为[t,y]
,而我想要的是y
的子集。我不能只做一个sort
因为y
不是线性的,所以我不得不对t
进行排序。
我有什么想法吗?
答案 0 :(得分:2)
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)
如果我理解正确,您希望对维持其原始订单的元素进行采样。你可以这样做:
即:
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