【问题标题】:Numpy-native "nested-for-like" structureNumpy-native“嵌套类”结构
【发布时间】:2015-10-04 07:30:11
【问题描述】:

我想在 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 

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

【问题讨论】:

标签: python arrays performance numpy vectorization


【解决方案1】:

如果我的问题正确,您正在寻找从存储为 1D 数组的两个独立变量中形成 2D 网格。所以,同样的,你可以使用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]])

【讨论】:

  • np.meshgrid 是我找不到的函数。谢谢。
  • @Excalabur 很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多