python - Numpy Polyfit 或 X 和 Y 多维数组的任何拟合

标签 python numpy multidimensional-array scipy model-fitting

我有两个大型多维数组:Y 包含 50 万个对象的三个测量值(例如 shape=(500000,3))和 X 具有相同的形状,但包含 Y 测量值的位置。

首先,我想为包含一个对象的每一行拟合一个多项式方程。我知道遍历数组非常慢,但我目前正在做的是:

fit = array([polyfit(X[i],Y[i],deg) for i in xrange(obs.shape[0])])

我的问题是:是否有可能在不明确迭代它们的情况下拟合两个数组的每一行?

最佳答案

无需沿第一个轴迭代即可这样做。但是,您的第二个轴很短(只有 3 个),您实际上可以容纳不超过 2 个系数。

In [67]:

import numpy as np
import scipy.optimize as so

In [68]:

def MD_ployError(p, x, y):
    '''if x has the shape of (n,m), y must be (n,m), p must be (n*p, ), where p is degree'''
    #d is no. of degree
    p_rshp=p.reshape((x.shape[0], -1))
    f=y*1.
    for i in range(p_rshp.shape[1]):
        f-=p_rshp[:,i][:,np.newaxis]*(x**i)
    return (f**2).sum()

In [69]:

X=np.random.random((100, 6))
Y=4+2*X+3*X*X
P=(np.zeros((100,3))+[1,1,1]).ravel()

In [70]:

MD_ployError(P, X, Y)

Out[70]:
11012.2067606684

In [71]:

R=so.fmin_slsqp(MD_ployError, P, args=(X, Y))
Iteration limit exceeded    (Exit mode 9) #you can increase iteration limit, but the result is already good enough.
            Current function value: 0.00243784856039
            Iterations: 101
            Function evaluations: 30590
            Gradient evaluations: 101

In [72]:

R.reshape((100, -1))

Out[72]:
array([[ 3.94488512,  2.25402422,  2.74773571],
       [ 4.00474864,  1.97966551,  3.02010015],
       [ 3.99919559,  2.0032741 ,  2.99753804],
..............................................)

关于python - Numpy Polyfit 或 X 和 Y 多维数组的任何拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22508593/

相关文章:

python - Sklearn 聚类相似订单

多次初始化时,Python C API 在 'import numpy' 处崩溃

python - 使用 numpy 重复数组维度(不使用 np.repeat)

php - 如何将数组转换为键值对数组?

python - 尽管安装了所需的库(在 ubuntu 上使用 python3),但 Pyautogui 函数 LocateOnScreen 仍然出错。请帮帮我

Python子进程仅将stdout Popen到变量

python - 在 Python 脚本中为 C++ 代码运行构建 (make)

python - 利用列表已排序的事实来加速 numpy 相关程序

arrays - 相同字符的二维数组

c - 它如何使用指向数组的指针计算数组的大小?