我想在 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]])
关于python - Numpy-native "nested-for-like"结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31427334/