Существует ли простая команда python 3, которая реплицирует команду interlap из matlab на несколько столбцов? - PullRequest
0 голосов
/ 07 апреля 2020

Существует ли простая команда python 3, которая реплицирует команду interlap matlab на несколько столбцов?

data_1 содержит два параметра (1 на столбец), которые go с вектором времени time_1 (data_1 - 5 массивом 2, который фактически не используется в этом примере, поэтому его можно игнорировать)

data_2 содержит два параметра (1 на столбец), которые go с вектором времени time_2

import numpy as np
data_2 = np.array([ [ 0.43, -0.54], [ 0.32, -0.83], [ 0.26, -0.94], [ 0.51, -0.69], [ 0.63, -0.74] ])
time_1 = np.array([ 399.87, 399.89, 399.91, 399.93, 399.95 ])
time_2 = np.array([ 399.86, 399.88, 399.90, 399.92, 399.94 ])

Я хотел бы интерполировать двумерный массив data_2 в вектор времени time_1, чтобы оба набора данных имели один и тот же вектор времени.

Желаемый результат (который является просто np.interp двух столбцов data_2 в time_1 вектор времени и объединенный обратно в массив):

data_2_i = np.array([[ 0.375, -0.685], [ 0.290, -0.885], [ 0.385, -0.815], [ 0.570, -0.715], [ 0.630, -0.740]])

Фактические массивы будут содержать приблизительно 20 столбцов (параметров) и тысячи строк (более длинный временной диапазон).
Я знаю, что вы можете просто l oop для каждого столбца с помощью np.interp, но я надеялся, что есть более компактный и быстрый python 3 (numpy, scipy, pandas, et c.) Метод, который я не смог Трек Доу п еще. Я все еще довольно новичок в python (более знаком с matlab).

В matlab вы можете просто использовать interp1 для всего многостолбцового массива, чтобы получить результат из нескольких столбцов (хотя крайние случаи обрабатываются немного по-другому - NaN против последней записи в этом примере - меня не волнуют различия в крайнем случае).

1 Ответ

0 голосов
/ 08 апреля 2020

Это выглядит для работы (только что сам сделал быстрый скрипт):

import numpy as np

def interp_multi(x_i, x, y):
    ncol = y.shape[1] 
    y_i = np.zeros((len(x_i),ncol))
    for i in range(ncol):
        y_i[:,i] = np.interp(x_i, x, y[:,i])

    return y_i

data_2_i = interp_multi(time_1, time_2, data_2)
...