MATLAB:比较 2 个不同长度的数组
MATLAB: Comparing 2 arrays with different lengths
我有两个长度不同的数组(由于不同的采样率)需要比较。我想对较大的数组进行下采样以匹配长度较小的数组,但是该因子不是整数而是小数。
举个例子:
a =
1 1.375 1.75 2.125 2.5 2.875 3.25
b =
1 2 3
有什么方法可以操纵这些数组来匹配长度吗?
巧妙地使用 interp1
很容易做到这一点。诀窍是用于插值的关键点是一个数组,从 1 到 a
中的值,我们称之为 N
,并且插值的关键点将是一个线性增加的数组,其中第一个点是 1,最后一个点是 N
并且您将这个范围平均划分为具有与 b
.
中一样多的点
简单地说:
anew = interp1(1:numel(a), a, linspace(1, N, numel(b)));
linspace
生成一个从 1 到 N = numel(a)
的线性递增数组,其中的点数是你想要的,我们将其确定为 b
中的元素总数。这精确地指定了您想要为您提供与 b
的长度相匹配的下采样版本 a
的正确关键点,尽管需要进行一些插值。默认的插值方法是线性的。
使用您提供的 a
的示例输入,我们得到:
>> anew
anew =
1.0000 2.1250 3.2500
我有两个长度不同的数组(由于不同的采样率)需要比较。我想对较大的数组进行下采样以匹配长度较小的数组,但是该因子不是整数而是小数。
举个例子:
a =
1 1.375 1.75 2.125 2.5 2.875 3.25
b =
1 2 3
有什么方法可以操纵这些数组来匹配长度吗?
巧妙地使用 interp1
很容易做到这一点。诀窍是用于插值的关键点是一个数组,从 1 到 a
中的值,我们称之为 N
,并且插值的关键点将是一个线性增加的数组,其中第一个点是 1,最后一个点是 N
并且您将这个范围平均划分为具有与 b
.
简单地说:
anew = interp1(1:numel(a), a, linspace(1, N, numel(b)));
linspace
生成一个从 1 到 N = numel(a)
的线性递增数组,其中的点数是你想要的,我们将其确定为 b
中的元素总数。这精确地指定了您想要为您提供与 b
的长度相匹配的下采样版本 a
的正确关键点,尽管需要进行一些插值。默认的插值方法是线性的。
使用您提供的 a
的示例输入,我们得到:
>> anew
anew =
1.0000 2.1250 3.2500