我有两个大型数组
t = 0: 5e-4 : 1
f = @(t) some function
它们对于某些分析而言太大了,所以我想从每个分析中采样,以便采样数组看起来像
t_sampled = 0:5e-2:1
我想通过将索引放在t==t_sampled
来实现这一目标。
这样,我可以说t_sampled = t(idx)
我该怎么做?
答案 0 :(得分:1)
基本上,您希望将t_sampled
的每个元素k
找到t
t[ii] - t_sampled[k]
,其中[~, idx] = min(abs(bsxfun(@minus, t', t_sampled)));
最小。如果数组是无序的,那么你必须是通用的并比较所有元素:
t
但是,由于1:numel(t)
严格单调,您可以在索引idx = interp1(t, 1:numel(t), t_sampled, 'nearest');
上使用interp1
:
f_sampled = interp1(t, ft, t_sampled, 'nearest');
甚至直接在所需的值上:
Response
答案 1 :(得分:0)
您的问题不是很明确,但似乎datasample
会给出解决方案:
t = 0:5e-4:1;
p = 0.01; % the proportion of t to sample [0..1)
t_sampled = datasample([t; 1:length(t)].',floor(length(t)*p),'Replace',false);
t_ind = t_sampled(:,2)
现在,t_ind
将是采样t
的索引。
还有另一个更简单的选项,没有datasample
:
t_ind = (randperm(length(t),floor(length(t)*p))) % indecies
t_sampled = t(t_ind) % values that was sampled
这是你要找的吗?