老师给了我一组数据, 让我把图画出来 效果是这样的 http://v1.freep.cn/3tb_160713170646njy5512293.jpg 数据在这里 http://yun.baidu.com/share/link?shareid=3048138222&uk=637680708 啊 我快要崩溃了, python 到底要怎样才能生成三维网格? 到底要怎样才能三维插值? 谁能帮帮我啊!
1
justou 2016-07-13 18:16:33 +08:00
|
2
nccers OP @justou 我都看了 contour3d 需要一个三维网格与对应的值, interpn 也只能对三维网格插值, 问题是我的数据是散点, 要用 mgrid 生成三维网格然后再用, griddata 插值, 我现在就卡在 griddata 插值上了, 这个函数搜来搜去只有 matlab 的例子, python 只有简单的一句话没有例子 .我是实在没办法了, 能帮我写个例子么?
|
4
lazydao 2016-07-13 20:23:15 +08:00 via iPad
为啥一点要 Python ?
|
6
nccers OP matlab 画出来是这样的:http://i1.piimg.com/567571/adc28c55678ba7fc.png
|
7
nccers OP python 卡在 griddata 函数上了 他需要构建一个 ndarray 的 tuple 但没例子我也不知道这个 tuple 是什么样子的啊
|
8
justou 2016-07-14 02:16:44 +08:00
不太清楚你的问题细节, 写了个 3d 插值的例子:
# -*- coding: utf-8 -*- import numpy as np from scipy.interpolate import interpn from enthought.mayavi import mlab mlab.options.offscreen = True original_points = 20j interp_points = 40j figsize = (1280, 720) x, y, z = np.mgrid[-15:14:original_points, -12:12:original_points, -14:15:original_points] # x.shape: 20x20x20 # y.shape: 20x20x20 # z.shape: 20x20x20 s = np.sin(x*y*z)/(x*y*z) # s.shape: 20x20x20 mlab.contour3d(x, y, z, s) mlab.savefig("original.png", size=figsize) xs, ys, zs = np.mgrid[-15:14:interp_points, -12:12:interp_points, -14:15:interp_points] # Construct a 3d array of 3-dimensional points. arr_4d = np.concatenate((xs[..., None], ys[..., None], zs[..., None]), axis=3) # shape: 40x40x40x3 ss = interpn((x[:, 0, 0], y[0, :, 0], z[0, 0, :]), s, arr_4d, method="nearest") # Weirdly though, this will also work, why?(゚д゚) sss = interpn((x[:, 0, 0], y[0, :, 0], z[0, 0, :]), s, (xs, ys, zs), method="nearest") print np.all(ss == sss) # True mlab.contour3d(xs, ys, zs, ss) mlab.savefig("interpolate.png", size=figsize) |
9
justou 2016-07-14 02:21:43 +08:00
axis 改成-1 好一点
np.concatenate((xs[..., None], ys[..., None], zs[..., None]), axis=-1) |