我有一些基本问题但我似乎无法解决它。我有两个非常大的数据。我有一个48554 x 1的矩阵A和一个160272 x 1的矩阵B.我想做的是"下采样"矩阵B使其与矩阵A具有相同的长度。此外,我想要一个能够为几乎任何大的m x 1和n x 1矩阵执行此操作的函数(因此它比这个特定示例更有用)。我尝试使用resample函数:
resample(B,length(A),length(B))
但是我收到一个错误,表明过滤器长度太大。接下来,我尝试使用for循环简单地从矩阵B中提取每个第i个元素并将其保存到一个新的矩阵中,但由于矢量长度不能被整数整除,因此效果不佳。有没有人有其他(希望很简单)的方法来实现这个目标?
答案 0 :(得分:2)
您可以尝试使用interp1功能。我知道下采样本身并不是真正的插值。这是一个例子:
x1 = [0:0.1:pi];%vector length is 32
x2 = [0:0.01:pi];% vector length is 315
y1 = sin(x1);
y2 = sin(x2);
%down sample y2 to be same length as y1
y3 = interp1(x2,y2,x1);%y3 length is 32
figure(1)
plot(x2,y2);
hold on
plot(x1,y1,'k^');
plot(x1,y3,'rs');
% in general use this method to down-sample (or up-sample) any vector:
% resampled = interp1(current_grid,current_vector,desired_grid);
% where the desired_grid is a monotonically increasing vector of the desired length
% For example:
x5 = [0.0:0.001:1-0.001];
y5 = sin(x);
% If I want to down sample y5 to be 100 data points instead of 1000:
y6 = interp1([1:length(y5)],y5,1:1:100);
% y6 is now 100 data point long. Notice I didn't use any other data except for y6, the length of y6 and my desired length.