MATLAB中是否有任何内置函数可以统计地扩展实数序列,以便将生成的序列扩展到我想要的任何大小。我有一个499个元素的序列,我想将它扩展到4096个元素。提前谢谢。
答案 0 :(得分:2)
如果您想要将499个元素的向量插值到4096个元素的更高分辨率,可以通过以下方式使用INTERP1函数(其中x
是您的499个元素向量):
y = interp1(x,linspace(1,499,4096));
以上使用函数LINSPACE生成一个4096个元素的矢量,其值在1到499之间线性间隔,然后用作插值点。默认情况下,INTERP1函数使用线性插值来计算旧点之间的新值。您可以通过以下方式使用其他插值方法:
y = interp1(x,linspace(1,499,4096),'spline'); %# Cubic spline method
y = interp1(x,linspace(1,499,4096),'pchip'); %# Piecewise cubic Hermite method
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您知道数据在参数系列分布的Pearson或Johnson系统中的分布情况,那么您可以使用抽样函数pearsrnd和{生成更多数据{3}}(用于生成随机值而不指定哪个参数分布)
%# load data, lets say this is vector of 499 elements
data = load('data.dat');
%# generate more data using pearsrnd
moments = {mean(data),std(data),skewness(data),kurtosis(data)};
newData = pearsrnd(moments{:}, [4096-499 1]);
%# concat sequences
extendedData = [data; newData];
%# plot histograms (you may need to adjust the num of bins to see the similarity)
subplot(121), hist(data), xlabel('x'), ylabel('Frequency')
subplot(122), hist(extendedData), xlabel('x'), ylabel('Frequency')
或使用johnsrnd:
%# generate more data using johnsrnd
quantiles = quantile(data, normcdf([-1.5 -0.5 0.5 1.5]));
newData = johnsrnd(quantiles, [4096-499 1]);
另一方面,如果要假设非参数分布,可以使用johnsrnd函数或ecdf函数。
请参阅演示 ksdensity 以获取完整示例(强烈建议!)。