首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从网格数据生成数据(Numpy)

从网格数据生成数据(Numpy)
EN

Stack Overflow用户
提问于 2016-09-27 00:09:55
回答 1查看 2.5K关注 0票数 5

我想问如何从网格生成相应的值。我有一个函数"foo“,它接受一个长度为2的一维数组,并返回一些实数。

代码语言:javascript
复制
import numpy as np

def foo(X):  
    #this function takes a vector, e.g., np.array([2,3]), and returns a real number.
    return sum(X)**np.sin( sum(X) );

x = np.arange(-2, 1, 1)          # points in the x axis
y = np.arange( 3, 8, 1)          # points in the y axis
X, Y = np.meshgrid(x, y)         # X, Y : grid

我用网格生成X和Y网格。

然后,如何使用"foo“函数生成相应的Z值,以便在3D中绘制它们,例如用X、Y、Z值绘制plot_surface函数?

这里的问题是如何使用"foo“函数生成与X和Y具有相同形状的Z值。因为我的"foo“函数只使用一维数组,所以我不知道如何使用这个函数与X和Y一起生成相应的Z值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-27 00:59:38

使用np.dstack将两个numpy数组叠成“深度”,然后修改foo函数,使其只在叠加数组的最后一个轴上操作。这很容易使用参数np.sum和参数axis=-1来完成,而不是使用内置sum

代码语言:javascript
复制
import numpy as np

def foo(xy):
    return np.sum(xy, axis=-1) ** np.sin(np.sum(xy, axis=-1))

x = np.arange(-2, 1, 1)          # points in the x axis
y = np.arange( 3, 8, 1)          # points in the y axis
X, Y = np.meshgrid(x, y)         # X, Y : grid
XY = np.dstack((X, Y))

现在,你应该得到:

代码语言:javascript
复制
>>> XY.shape
(5, 3, 2)
>>> foo(XY)
array([[ 1.        ,  1.87813065,  1.1677002 ],
       [ 1.87813065,  1.1677002 ,  0.35023496],
       [ 1.1677002 ,  0.35023496,  0.2136686 ],
       [ 0.35023496,  0.2136686 ,  0.60613935],
       [ 0.2136686 ,  0.60613935,  3.59102217]])

如果您想达到同样的效果,但不需要修改foo,那么您可以使用np.apply_along_axis,它应该完全满足您的需要:

代码语言:javascript
复制
>>> np.apply_along_axis(foo, -1, XY)
array([[ 1.        ,  1.87813065,  1.1677002 ],
       [ 1.87813065,  1.1677002 ,  0.35023496],
       [ 1.1677002 ,  0.35023496,  0.2136686 ],
       [ 0.35023496,  0.2136686 ,  0.60613935],
       [ 0.2136686 ,  0.60613935,  3.59102217]])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39714176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档