概述
使用 polyfit 时,我遇到了性能问题,因为它似乎无法接受广播数组。我知道来自此帖子的信息,如果使用numpy.polynomial.polynomial.polyfit
,则相关数据y
可以是多维的。然而,维度x
不能是多维的。有没有什么办法可以解决这个问题?
动机
我需要计算一些数据的变化率。为了与实验匹配,我想使用以下方法:取数据y
和x
,对于数据的短段进行拟合多项式,然后使用拟合系数作为变化率的估计值。
说明
import numpy as np
import matplotlib.pyplot as plt
n = 100
x = np.linspace(0, 10, n)
y = np.sin(x)
window_length = 10
ydot = [np.polyfit(x[j:j+window_length], y[j:j+window_length], 1)[0]
for j in range(n - window_length)]
x_mids = [x[j+window_length/2] for j in range(n - window_length)]
plt.plot(x, y)
plt.plot(x_mids, ydot)
plt.show()
蓝线是原始数据(正弦曲线),而绿线是第一阶导数(余弦曲线)。
问题
为了进行向量化,我采用了以下方法:
window_length = 10
vert_idx_list = np.arange(0, len(x) - window_length, 1)
hori_idx_list = np.arange(window_length)
A, B = np.meshgrid(hori_idx_list, vert_idx_list)
idx_array = A + B
x_array = x[idx_array]
y_array = y[idx_array]
这将两个一维向量广播为形状为
(n-window_length, window_length)
的二维向量。现在我希望polyfit
有一个axis
参数,这样我就可以并行计算,但不幸的是没有。有人有什么建议吗?我很乐意听取意见。