Как я могу интерполировать массив numpy, чтобы он стал определенной длины? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть три numpy массива каждый разной длины:

A.shape = (3401,)
B.shape = (2200,)
C.shape = (4103, )

Я бы хотел усреднить три массива, чтобы получить новый массив с размером самого большого массива (в данном случае C):

D.shape = (4103,)

Проблема в том, что я не думаю, что смогу сделать это без добавления «поддельных» данных к A и B путем интерполяции.

  1. Как я могу выполнить интерполяцию первых двух numpy массивов, чтобы они имели ту же длину, что и массив C?

  2. Нужно ли здесь вообще выполнять интерполяцию?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Первое, что приходит на ум, это zoom from scipy:

Массив масштабируется с использованием сплайн-интерполяции запрошенного ордера.

Код:

import numpy as np
from scipy.ndimage import zoom

A = np.random.rand(3401)
B = np.random.rand(2200)
C = np.ones(4103)

for arr in [A, B]:
    zoom_rate = C.shape[0] / arr.shape[0]
    arr = zoom(arr, zoom_rate)
    print(arr.shape)

Выход:

(4103,)
(4103,)
0 голосов
/ 06 февраля 2020

Я думаю, что самый простой вариант - сделать следующее:

D = np.concatenate([np.average([A[:2200], B, C[:2200]], axis=0),
                    np.average([A[2200:3401], C[2200:3401]], axis=0),
                    C[3401:]])
...