【发布时间】:2016-09-20 12:02:31
【问题描述】:
我有一大组(数千条)平滑线(一系列 x,y 对),x 和 y 的采样不同,每条线的长度也不同,即
x_0 = {x_00, x_01, ..., } # length n_0
x_1 = {x_10, x_11, ..., } # length n_1
...
x_m = {x_m0, x_m1, ..., } # length n_m
y_0 = {y_00, y_01, ..., } # length n_0
y_1 = {y_10, y_11, ..., } # length n_1
...
y_m = {y_m0, y_m1, ..., } # length n_m
我想找到插值到一组常规 x 点的每条线的累积属性,即x = {x_0, x_1 ..., x_n-1}
目前我在for-循环每一行,创建一个插值,重新采样,然后取该结果的总和/中值/任何值。它有效,但它真的很慢。 有没有办法对这个操作进行向量化/矩阵化?
我在想,既然线性插值可以是矩阵运算,也许有可能。同时,由于每一行可以有不同的长度......这可能很复杂。 编辑:但是零填充较短的数组会很容易......
我现在正在做的事情看起来像,
import numpy as np
import scipy as sp
import scipy.interpolate
...
# `xx` and `yy` are lists of lists with the x and y points respectively
# `xref` are the reference x values at which I want interpolants
yref = np.zeros([len(xx), len(xref)])
for ii, (xi, yi) in enumerate(zip(xx, yy)):
yref[ii] = sp.interp(xref, xi, yi)
y_med = np.median(yref, axis=-1)
y_sum = np.sum(yref, axis=-1)
...
【问题讨论】:
标签: python numpy math scipy vectorization