如何改进查找符合特定条件的n样本向量子集的代码?

时间:2017-03-04 15:28:47

标签: matlab syntax vectorization reshape

在Matlab中,给定一个向量A(请在这里找到它:https://www.dropbox.com/s/otropedwxj0lki7/A.mat?dl=0),我怎样才能找到范围最小(或标准差)的n样本向量子集?

我正在尝试一种潜在的解决方案:在列中重塑矢量,执行每列的范围并选择最小的。但是,当应用于具有不同长度的其他示例时,重塑并不总是有效。如何以更简单,更有效的方式解决这个问题?

Fs = 1000; % sampling frequency
time = round(length(A)/Fs)-1; % calculate approximated rounded total length in time
A_reshaped = reshape(A(1:time*Fs), [], time/2); % reshape A (deleting some samples at the end) in time/2 columns
D(1,:) = mean(A_reshaped);
D(2,:) = range(A_reshaped);
[~,idx] = min(D(2,:));
Value = D(1,idx);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

要查找具有最小范围的n样本,您可以对向量进行排序,并从最后一节中减去排序向量的第一部分。然后使用最小值索引找到n样本:

n=4
a= rand(1,10);
s= sort(a);
[~,I]=min(s(n:end)-s(1:end-n+1))
result = s(I:I+n-1)