MATLAB: сравнение 2 массивов разной длины



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



Для примера:



a =
1 1.375 1.75 2.125 2.5 2.875 3.25

b =
1 2 3


Существует ли какой-либо способ манипулировать этими массивами, чтобы они соответствовали длинам?

883   1  

1 ответ:

Это легко сделать с умным использованием 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

Comments

    Ничего не найдено.