Interpolate between rows or columns of a Numpy array

I have an array of W x H A1. There is another matrix W x M A2, where M <HOUR. It is assumed that these M-points along this measurement are placed in cells with an equal interval for all measurements of W. I achieved this

hopSize = H / M
A1[:, 0 : min(A1.shape[1], hopSize*M) : hopSize] = A2

Now I want to fill in the value of the anchor points M to fill all the points between these anchors along the dimension H, for example, the value Anchor 1 will be copied to each point for A1[:, Anchor1 : Anchor2].

I wonder if there is a way to achieve this without using a for-loop.

+4
source share
1 answer

A general approach would be to use scipy.interpolate.interp1d:

import numpy as np
from scipy.interpolate import interp1d

# generate some example data
W = 3
H = 10
M = 5

A2 = np.arange(W * M).reshape(W, M)
print(A2)
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]]

# the initial column indices for A2
x = np.arange(M)

# we create a scipy.interpolate.interp1d instance
itp_A2 = interp1d(x, A2, kind='nearest')

# the output column coordinates for A1
xi = np.linspace(0, M - 1, H)

# we get the interpolated output by calling the interp1d instance with the
# output coordinates
A1 = itp_A2(xi)
print(A1)
# [[  0.   0.   1.   1.   2.   2.   3.   3.   4.   4.]
#  [  5.   5.   6.   6.   7.   7.   8.   8.   9.   9.]
#  [ 10.  10.  11.  11.  12.  12.  13.  13.  14.  14.]]

, , , ..


, , np.repeat:

# upsampling factor
fac = H / M

print(np.repeat(A2, fac, 1))
# [[ 0  0  1  1  2  2  3  3  4  4]
#  [ 5  5  6  6  7  7  8  8  9  9]
#  [10 10 11 11 12 12 13 13 14 14]]
+4

All Articles