2016-07-29 3 views
2

У меня есть два массива различной длины (из-за разных частот выборки), которые мне нужно сравнить. Я хотел бы уменьшить размер массива большего размера, чтобы он соответствовал меньшему по длине, однако коэффициент не является целым числом, а десятичным.MATLAB: Сравнение 2 массивов различной длины

Для примера:

a = 
    1  1.375  1.75  2.125  2.5  2.875  3.25 

b = 
    1  2  3 

Есть ли способ, чтобы манипулировать эти массивы, чтобы соответствовать длине?

ответ

2

Это легко сделать с умным использованием interp1. Фокус в том, что ключевыми точками, используемыми для интерполяции, является массив, идущий от 1 до нескольких значений, как у вас в a, который мы будем называть N, а интерполированные ключевые точки будут линейно увеличиваться, где первая точка равна 1, последняя точка - N, и вы равномерно разделите этот диапазон, чтобы иметь столько же очков, сколько есть в b.

Проще говоря:

anew = interp1(1:numel(a), a, linspace(1, N, numel(b))); 

linspace формирует линейно возрастающий массив от 1 до N = numel(a) на стольких точек, как вы хотите, которые мы определяем как общее количество элементов в b. Это точно указывает правильные ключевые точки, которые вы хотите дать вам с пониженной дискретизацией a, которая соответствует длине b, хотя потребуется некоторая интерполяция. Метод интерполяции по умолчанию является линейным.

Используя входные выборки из a вы предоставили, мы получаем:

>> anew 

anew = 

    1.0000 2.1250 3.2500 
+0

Perfect. Большое спасибо ** rayryeng **. – Bensa

+0

Нет проблем. Удачи! – rayryeng