使用 numpy 和/或 scipy 插值 3D 体积

2024-03-12

我非常沮丧,因为几个小时后我似乎无法在 python 中进行看似简单的 3D 插值。在Matlab中我所要做的就是

Vi = interp3(x,y,z,V,xi,yi,zi)

使用 scipy 的 ndimage.map_coordinate 或其他 numpy 方法与此完全等效的是什么?

Thanks


在 scipy 0.14 或更高版本中,有一个新函数scipy.interpolate.RegularGridInterpolator https://docs.scipy.org/doc/scipy-0.18.0/reference/generated/scipy.interpolate.RegularGridInterpolator.html#scipy.interpolate.RegularGridInterpolator这非常类似于interp3.

MATLAB 命令Vi = interp3(x,y,z,V,xi,yi,zi)会翻译成这样:

from numpy import array
from scipy.interpolate import RegularGridInterpolator as rgi
my_interpolating_function = rgi((x,y,z), V)
Vi = my_interpolating_function(array([xi,yi,zi]).T)

这是一个完整的例子,展示了两者;它将帮助您了解确切的差异...

MATLAB代码:

x = linspace(1,4,11);
y = linspace(4,7,22);
z = linspace(7,9,33);
V = zeros(22,11,33);
for i=1:11
    for j=1:22
        for k=1:33
            V(j,i,k) = 100*x(i) + 10*y(j) + z(k);
        end
    end
end
xq = [2,3];
yq = [6,5];
zq = [8,7];
Vi = interp3(x,y,z,V,xq,yq,zq);

结果是Vi=[268 357]这确实是这两点的值(2,6,8) and (3,5,7).

SIPY代码:

from scipy.interpolate import RegularGridInterpolator
from numpy import linspace, zeros, array
x = linspace(1,4,11)
y = linspace(4,7,22)
z = linspace(7,9,33)
V = zeros((11,22,33))
for i in range(11):
    for j in range(22):
        for k in range(33):
            V[i,j,k] = 100*x[i] + 10*y[j] + z[k]
fn = RegularGridInterpolator((x,y,z), V)
pts = array([[2,6,8],[3,5,7]])
print(fn(pts))

又是[268,357]。所以你会看到一些细微的差别:Scipy 使用 x,y,z 索引顺序,而 MATLAB 使用 y,x,z (奇怪);在 Scipy 中,您在单独的步骤中定义一个函数,当您调用它时,坐标会像 (x1,y1,z1),(x2,y2,z2),... 那样分组,而 matlab 使用 (x1,x2,.. .),(y1,y2,...),(z1,z2,...)。

除此之外,两者相似并且同样易于使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 numpy 和/或 scipy 插值 3D 体积 的相关文章

随机推荐

  • 调整图像大小时添加细白线

    当我们调整图像大小时 下载之后并将其存储到文档目录之前 通过以下代码 UIImage resizeImage UIImage image withSize CGSize newSize float actualHeight image si
  • 删除bash中每行的最后一个单词

    我正在尝试浏览一个文件 并删除每行中的最后一个单词 目前 我正在使用命令 sed s n old txt gt new txt 但结果显示 old txt 与 new txt 相同 感谢您的帮助 如果我能澄清这个问题 请告诉我 另外 为了定
  • 使用 JXL 将图像插入 Excel 文件而不拉伸它

    我可以使用 jxl 将图像插入到我的 excel 文件中sheet addImage WritableImage obj 我的问题是 它根据以下参数进行延伸WritableImage 我想知道是否有一种方法可以使我插入的图像不会像插入 20
  • SendGrid SMTP API:嵌入图像:错误请求

    我正在使用 sendgrid SMTP APIhttps github com sendgrid sendgrid csharp https github com sendgrid sendgrid csharp发送电子邮件 但我不知道如何
  • 在Python中,为什么负数的偶次方仍然是负数? [复制]

    这个问题在这里已经有答案了 在Python中 gt gt gt i 3 gt gt gt i 4 81 Why is i 4不评价为 i 4 但作为 i 4 我想有人可能会争辩说 求幂优先于 隐式 乘法i减一 即你应该阅读 1 i 4 但我
  • 如何在gdb中调用汇编?

    在 gdb 中我可以使用call运行函数 但是如果我想运行一些额外的程序集怎么办 Prior to GCC 5 1 I don t know of a way to run arbitrary machine code unless you
  • character_set_connection 的目的是什么?

    刚刚读过 Stefan Gehrig 的精彩回答是否需要 设置字符集utf8 https stackoverflow com questions 1566602 is set character set utf8 necessary 它比
  • 此错误是什么意思“NATURAL join 中使用的列不能有限定符”

    执行下面的代码后 我收到 ORA 25155 错误 SELECT p prod id prod name prod list price quantity sold cust last name FROM products p NATURA
  • 使用计数器和条件结束循环

    在Python中 我可以实现一个带有步数计数器和停止条件的循环作为经典案例for loop for i in range 50 result fun i print i result if result 0 break where fun
  • Jquery 在 onload 上执行 onchange 事件

    我有一个函数 可以在更改事件时运行后期操作 select marca change function var marca select marca option selected attr value select modello html
  • 从 webWorker 访问 localStorage

    WebWorker 可以访问 localStorage 吗 如果不是为什么不呢 从安全角度来看有问题吗 Web Worker 只能访问以下内容 XMLHttpRequest https developer mozilla org en US
  • java.net.SocketException:使用 HTTPConnection 重置连接

    我正在尝试使用一些外部 API 来获取一些数据 当数据量很小时 一切正常 但是当 API 返回的数据量很大时 我得到连接重置例外 下面的代码来自java类InterfaceHelper 我还在出现异常的行no处标记了注释 它在尝试从 Inp
  • 将 Backbone.sync 扩展为批量同步?

    应使用什么技术来实现 Backbone sync 的批量插入 更新 我想这取决于你的使用场景 以及你想改变多少调用代码 我认为你有两个选择 选项 1 不更改客户端 调用 代码 奇怪的是 注释Backbone sync 的来源 http ba
  • 模板,仅在头文件中编码?

    最近我了解到 如果我想使用模板 我应该只在头文件中实现代码 我知道有解决方案可以在 h 和 cpp 文件中执行此操作 但假设我不想这样做 我应该将所有代码写入 h 文件中吗 即使程序可能很大 这是一种编写代码的好方法吗 另外 只有 h文件
  • Django 全局查询集

    我想在我的 django 应用程序中有一个全局变量 用于存储我稍后在某些函数中使用的对象的结果列表 并且我不想多次评估查询集 我这样做 from app models import StopWord a list StopWord obje
  • 如何修复尝试使用 Git 推送时出现的“remote: fatal error in commit_refs”错误?

    当我尝试推动master托管于的分支https github com https github com I get 远程 commit refs 中出现致命错误 我该如何解决这个问题 就我而言 当我尝试推送时 GitHub 已经宕机了 只需
  • 在docker中使用overlay使用多主机网络功能是否需要swarm

    我已按照以下示例进行操作开始覆盖 https docs docker com engine userguide networking get started overlay 我有一个简单的查询 是否可以使用覆盖的多主机网络功能而无需创建sw
  • Gradle 错误:意外的输入:android.gms:play-services

    在运行时在 Gradle 中显示错误 错误 任务 app transformClassesWithInstantRunForDebug 执行失败 意外输入 ImmutableJarInput name com google android
  • 使用 Boost 序列化和反序列化 JSON

    我是 C 新手 序列化和反序列化类型数据的最简单方法是什么std Map using boost 我找到了一些使用的例子PropertyTree但它们对我来说很模糊 注意property tree将键解释为路径 例如放置 a b z 对将创
  • 使用 numpy 和/或 scipy 插值 3D 体积

    我非常沮丧 因为几个小时后我似乎无法在 python 中进行看似简单的 3D 插值 在Matlab中我所要做的就是 Vi interp3 x y z V xi yi zi 使用 scipy 的 ndimage map coordinate