Numpy-native "nested-for-like" 结构

Numpy-native "nested-for-like" structure

我想在 python 中生成一个 2×N 数组以用于 scipy.optimize.curve_fit

我有一个函数,两个自变量存储为一维数组,数据存储在二维数组中。 curve_fit 要求将数据展平,这在 data.ravel() 中很容易。

但是,这是我用来生成 2xN 纵坐标值数组的技巧:

ordinate = np.array([[l,t] for l in length for t in time]).T 

有效,但速度较慢。什么是(矢量化?)更快的方法?

如果我答对了问题,您希望从存储为一维数组的两个自变量中形成二维网格。因此,同样,您可以使用 np.meshgrid -

time2D,length2D = np.meshgrid(time,length)
ordinate_vectorized = np.row_stack((length2D.ravel(),time2D.ravel()))

样本运行-

In [149]: time
Out[149]: array([7, 2, 1, 9, 6])

In [150]: length
Out[150]: array([3, 5])

In [151]: ordinate = np.array([[l,t] for l in length for t in time]).T

In [152]: ordinate
Out[152]: 
array([[3, 3, 3, 3, 3, 5, 5, 5, 5, 5],
       [7, 2, 1, 9, 6, 7, 2, 1, 9, 6]])

In [153]: time2D,length2D = np.meshgrid(time,length)
     ...: ordinate_vectorized = np.row_stack((length2D.ravel(),time2D.ravel()))
     ...: 

In [154]: ordinate_vectorized
Out[154]: 
array([[3, 3, 3, 3, 3, 5, 5, 5, 5, 5],
       [7, 2, 1, 9, 6, 7, 2, 1, 9, 6]])