如何获得两个数组相等的索引?

时间:2016-08-03 05:40:28

标签: matlab

我有两个大型数组

t = 0: 5e-4 : 1

f = @(t) some function

它们对于某些分析而言太大了,所以我想从每个分析中采样,以便采样数组看起来像

t_sampled = 0:5e-2:1

我想通过将索引放在t==t_sampled来实现这一目标。 这样,我可以说t_sampled = t(idx)

我该怎么做?

2 个答案:

答案 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

这是你要找的吗?