【发布时间】:2018-12-28 00:43:48
【问题描述】:
我有一个由间距 xi,yi,zi 定义的立方网格:
xi,yi,zi = [linspace(ox,ox+s*d,s) for ox,s,d in zip(origin,size,delta)]
我还在该网格上设置了一组标量值W。 W.shape() == size。我想使用scipy's linear interpolation,它需要作为输入:
类
scipy.interpolate.LinearNDInterpolator(points, values):参数:
points: ndarray 浮点数,形状(npoints, ndims)数据点坐标。
values:浮点数或复数的ndarray,形状(npoints, ...)数据值。
如何从xi,yi,zi 创建一组假的points(通过魔法广播)?现在我正在创建一个中间数组来提供给插值函数 - 有没有更好的方法?
相关问题:Numpy meshgrid in 3D。这篇文章中的答案实际上创建了网格 - 我只想将其模拟为另一个函数的输入(首选纯 numpy 解决方案)。
【问题讨论】:
-
您想要 Nxdim 数组但欺骗 numpy 使其实际上不分配完整数组?这是不可能的。您必须使用为常规网格设计的工具,但我想这对于 scipy 中的更高维度不存在。
-
@Sebastian,您可以从较小的数组中模拟较大的数组。例如,如果
x.shape,y.shape = (n,m),您可以使用[X,Y] = np.meshgrid(x,y); S=X+Y而不是S=x+y[:,np.newaxis],创建f(x,y) = x+ynot 的广播数组。有关详细信息,请参阅链接的问题。 -
是的,但您似乎想要模拟更多元素,然后实际上是在 xi,zi,yi 数组中。这在理论上是可能的(使用 stride_tricks)。但是,由于生成的数组应该是二维的,因此无法在这种情况下构造它,即使不太可能 scipy 也不会在以后创建一个副本。
-
@Sebastian
xi,yi,zi -> (n,m,l)的形状表明我想要一个形状为(n*m*l,3)的对象points。这正是meshgrid对二维xi,yi -> (n,m)到(n*m,2)所做的。在某些时候,scipy 无论如何都会为插值创建一个内部副本,但我试图在这一步避免不必要的副本。 -
@Hooked,这不是
meshgrid所做的。你的标题有点误导。我已经给出了一个答案,它可以按照您的要求制作网格,但我认为您不能保持这种方式并将其变成某种形状(n*m*l,3)。
标签: python numpy scipy array-broadcasting