这里有三种加快速度的方法。你没有给出期望的速度或精度,甚至矢量大小,所以买家要小心。在
TL;DR
时间安排:len 1 2 3 4
1000 0.045 0.033 0.025 0.022
10000 0.290 0.097 0.029 0.023
100000 3.429 0.767 0.083 0.030
1000000 0.546 0.046
1) Original Method
2) Pre-estimate with Subset
3) M Newville [linear log-log estimate](https://stackoverflow.com/a/44975066/7311767)
4) Subset Estimate (Use Less Data)
子集预估计(方法2):
只需运行curve_fit两次,第一次使用数据的一小部分来获得快速估计,就可以获得相当好的加速。然后使用该估计值为curve_fit与整个数据集种子。在
^{pr2}$
使用M Newville提出的对数估计,速度也快得多。由于OP关注Newville提出的初始估计方法,该方法使用带有子集的{}来估计曲线中的断点。在x, y = current_data
stride = int(max(1, len(x) / 200))
c0 = curve_fit(power_law, x[0:len(x):stride], y[0:len(y):stride])[0]
index_max = np.where(x > c0[1])[0][0]
log_x = np.log(x[:index_max])