我想在给定y值的固定向量的情况下在矩阵的每一行(x值)之间进行插值。我使用的是python,基本上我需要类似scipy.interpolate.interp1d
的东西,但x值是矩阵输入。我通过循环实现了这一点,但我希望尽可能快地进行操作。
修改
下面是我现在正在做的代码示例,请注意我的矩阵有更多的行数量级为数百万:
import numpy as np
x = np.linspace(0,1,100).reshape(10,10)
results = np.zeros(10)
for i in range(10):
results[i] = np.interp(0.1,x[i],range(10))
答案 0 :(得分:1)
@Joe Kington建议你可以使用map_coordinates
:
import scipy.ndimage as nd
# your data - make sure is float/double
X = np.arange(100).reshape(10,10).astype(float)
# the points where you want to interpolate each row
y = np.random.rand(10) * (X.shape[1]-1)
# the rows at which you want the data interpolated -- all rows
r = np.arange(X.shape[0])
result = nd.map_coordinates(X, [r, y], order=1, mode='nearest')
上述内容适用于以下y
:
array([ 8.00091648, 0.46124587, 7.03994936, 1.26307275, 1.51068952,
5.2981205 , 7.43509764, 7.15198457, 5.43442468, 0.79034372])
注意,每个值表示每行要插值的位置。
提供以下result
:
array([ 8.00091648, 10.46124587, 27.03994936, 31.26307275,
41.51068952, 55.2981205 , 67.43509764, 77.15198457,
85.43442468, 90.79034372])
考虑到arange
d数据的性质以及插值的列(y
),这是有意义的。