python 等值面 插值_利用numpy/scipy从三维阵列计算等值面

仅使用numpy可以使用argsort、sort、take和适当的数组操作来获得一个好的解决方案。以下函数使用加权平均值计算等参曲面:def calc_iso_surface(my_array, my_value, zs, interp_order=6, power_parameter=0.5):

if interp_order < 1: interp_order = 1

from numpy import argsort, take, clip, zeros

dist = (my_array - my_value)**2

arg = argsort(dist,axis=2)

dist.sort(axis=2)

w_total = 0.

z = zeros(my_array.shape[:2], dtype=float)

for i in xrange(int(interp_order)):

zi = take(zs, arg[:,:,i])

valuei = dist[:,:,i]

wi = 1/valuei

clip(wi, 0, 1.e6, out=wi) # avoiding overflows

w_total += wi**power_parameter

z += zi*wi**power_parameter

z /= w_total

return z

此解决方案不处理与my_value对应的多个z的情况。以下代码中给出了构建以下iso曲面的应用示例:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值